Closed kwsc98 closed 3 months ago
Can not reproduce this on my end. Using the latest version of serde
and serde_json
and this simple test code:
use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize)]
struct Test {
sds: String
}
fn main() {
let test = Test { sds: "sds".to_string() };
let res = serde_json::to_string(&test).unwrap();
println!("{}", res);
}
yields:
{"sds":"sds"}
as expected, please provide more information and perhaps an simple example illustrating your issue.
like
let str = "sds";
let str_json = serde_json::to_string(str).unwrap();
println!("{:?}", str_json); // "\"sds\""
let res: Result<String, serde_json::Error> = serde_json::from_str(str);
println!("{:?}", res); // Err(Error("expected value", line: 1, column: 1))
serde_json::from_str()
deserialize a structure from a json string. I don't think
sds
is a valid json string.
Oh, I guess you have confused "the string type in json" (i.e. the "value"
in {"field": "value"}
) with "a string that is in the json format" (i.e. {"field": "value"}
as a whole), am I right?
It's indeed better for serde_json::{to_string, from_str}
to be renamed to serde_json::{to_json, from_json}
IMO, but that would be a breaking change and the documentation clarifies things most of the time anyway.
I have a project that communicates with Java projects, and in some Java json parsing libraries, the String type is treated directly as
sds
Instead of
\"sds\"
so
let res: Result<String, serde_json::Error> = serde_json::from_str("sds");
println!("{:?}", res); // Err(Error("expected value", line: 1, column: 1))
let res: Result<String, serde_json::Error> = serde_json::from_str("\"sds\"");
println!("{:?}", res); // Ok("sds")
Now I receive a Java response that I must process before I can use serde_json like
pub fn json_field_compatible(ty: &str, mut field: String) -> String {
if ty == "String" && !field.starts_with("\"") {
field.insert(0, '\"');
field.insert(field.len(), '\"');
}
field
}
... the String type treated directly as
sds
instead of"sds"
Such implementation would be incompatible with the JSON format specification, as both RFC 8259 and ECMA-404 define string
as:
'"' characters '"'
Here is a simple JSON format verifier if you don't want to look into the specs (remember to uncheck the Fix JSON
option as this will enable auto-correction).
i know , so i hope have like a "Fix JSON" Feature,
In that case, you probably should change your title to "Feature request: apply simple auto-corrections when deserialize", though I don't think that would be accepted.
Deserializing things other than JSON is out of scope for this library.
For example, in java interactions, fields of type String are serialized directly to sds instead of /"sds/", and using serde results in an error when serialization fails expected value at line 1 column 1 Hopefully this is compatible