我是json的新手并试图让一个基本的例子工作。
我的http请求会返回{'username':'1'},{'username':'1'}。
我对json的有效性感到困惑,但是如何将它变成一个字符串变量来反序列化。
由于ToJson返回{'username':'1'},我认为正确的做法是用双引号将其转换回来。
我显然错过了什么!
class DataItem{
public string username;
}
string json = "{'username': '1'}";
deserialized = JsonUtility.FromJson<DataItem>(json);
错误:ArgumentException:JSON解析错误:缺少对象成员的名称。
答案 0 :(得分:5)
通过非常有帮助的回答,我发现了我所缺少的内容。
// 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);
返回&#39;反序列化1&#39;
非常基本的东西,但感谢帮助我理解它!
答案 1 :(得分:2)
答案 2 :(得分:-1)
您缺少类中的[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);
}
}