Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

json serialization compatible problem #1121

Closed
kwsc98 opened this issue Apr 10, 2024 · 9 comments
Closed

json serialization compatible problem #1121

kwsc98 opened this issue Apr 10, 2024 · 9 comments
Labels
dialect Issues related to extensions or variations of ordinary JSON

Comments

@kwsc98
Copy link

kwsc98 commented Apr 10, 2024

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

@TinusgragLin
Copy link

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.

@kwsc98
Copy link
Author

kwsc98 commented Apr 13, 2024

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))

@TinusgragLin
Copy link

serde_json::from_str() deserialize a structure from a json string. I don't think

sds

is a valid json string.

@TinusgragLin
Copy link

TinusgragLin commented Apr 13, 2024

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.

@kwsc98
Copy link
Author

kwsc98 commented Apr 13, 2024

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
}

@TinusgragLin
Copy link

... 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).

@kwsc98
Copy link
Author

kwsc98 commented Apr 13, 2024

i know , so i hope have like a "Fix JSON" Feature,

@TinusgragLin
Copy link

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.

@dtolnay
Copy link
Member

dtolnay commented Apr 13, 2024

Deserializing things other than JSON is out of scope for this library.

@dtolnay dtolnay closed this as completed Apr 13, 2024
@dtolnay dtolnay added the dialect Issues related to extensions or variations of ordinary JSON label Apr 13, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
dialect Issues related to extensions or variations of ordinary JSON
Development

No branches or pull requests

3 participants