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);
得到了非常有帮助的回复,我发现了我所缺少的东西。
// 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);
}
}