JSON解析错误:缺少对象成员的名称

本文关键字:成员 对象 错误 JSON | 更新日期: 2023-09-27 18:01:47

我是json的新手,并试图获得一个基本的例子。

我的http请求返回{'username': '1'},{'username': '1'}

我很困惑,什么是有效的json看起来像,但也如何把它变成一个字符串变量反序列化。

由于ToJson返回{'username': '1'},我认为正确的做法是将其放在双引号中以将其转换回来。

我显然错过了什么!

class DataItem{
    public string username;
}
string json = "{'username': '1'}";
deserialized = JsonUtility.FromJson<DataItem>(json);

JSON解析错误:缺少对象成员的名称

JSON解析错误:缺少对象成员名。

得到了非常有帮助的回复,我发现了我所缺少的东西。

// Temp Data Struct
class DataItem{
    public string username;
    }
//Valid Json look like : {"username": "1"}
//Valid Json must be double quoted again when assigned to string var
// or escaped if you want 'valid' Json to be passed to the FromJson method
//string json = "{'"username'": '"1'"}"; or
string json = @"{""username"": ""1""}";
DataItem deserialized = JsonUtility.FromJson<DataItem>(json);
Debug.Log("Deserialized "+ deserialized.username);

返回'反序列化1'

非常基本的东西,但谢谢你帮助我理解它!

尝试使用双引号(")来定义键。

也许下面的参考可能有用。

https://www.rfc-editor.org/rfc/rfc7159第12页

您缺少类上的[SerializeField], JSON字符串是有效的。如果您想要双引号,您可以使用转义'",使其看起来像这样:"{'"username'": '"1'"}",但单引号也一样好。你唯一需要注意的是当字符串包含单引号(在这种情况下,用户名不应该)

[SerializeField]    
public class DataItem{
    
    public string username;
}
    
public class YourMonoBehaviour: MonoBehaviour
{
    void Awake()
    {
        loadJson();
    }
    void loadJson()
    {
      string json = "{'username': '1'}";
    
      DataItem deserialized = JsonUtility.FromJson<DataItem>(json);
    }
}