10

I need to build a json object at runtime. For now, just a simple {"key": "stringvalue"} object. But each key/val pair must be added in a loop.

This seems really simple/basic, but I didn't find any good examples or docs on it. I did finally manage to make something work, but it seems too convoluted to be the right way.

Can anyone post a working example?

1
  • please explain more, I think you could just create a hashmap or struct and serialize it. You are doing it the wrong way. Commented Nov 26, 2019 at 17:23

1 Answer 1

19

You can do this with serde_json::Value:

use serde_json::{Map, Value};

let mut map = Map::new();

// assuming keys_vals is a Vec<(String, String)>
for (key, val) in keys_vals.into_iter() {
    map.insert(key, Value::String(val));
}

let obj = Value::Object(map);

If you need to have the object constructed and still update the map:

let mut obj = Value::Object(map);

if let Value::Object(ref mut map) = obj {
    map.insert(key, val);
}
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.