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

时间:2016-08-09 17:23:30

标签: c# json json-deserialization

我是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解析错误:缺少对象成员的名称。

3 个答案:

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

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

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

https://tools.ietf.org/html/rfc7159#page-12

答案 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);
    }
}