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

Posted

技术标签:

【中文标题】JSON 解析错误:缺少对象成员的名称【英文标题】:JSON parse error: Missing a name for object member 【发布时间】:2016-12-15 20:49:05 【问题描述】:

我是 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。 json 使用",而不是' 您的原始数据输入也不是有效的 JSON。数组用 [ ] 语法表示。 谢谢大家,困惑之一是为什么如果 "username": "1" 有效,ToJson 会返回 'username': '1'。 【参考方案1】:

通过非常有用的回复,我找到了我所缺少的。

// 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”

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

【讨论】:

【参考方案2】:

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

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

https://www.rfc-editor.org/rfc/rfc7159#page-12

【讨论】:

【参考方案3】:

您缺少类上的 [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);
    

【讨论】:

以上是关于JSON 解析错误:缺少对象成员的名称的主要内容,如果未能解决你的问题,请参考以下文章

Azure 逻辑应用 - 解析 JSON 架构失败“对象中缺少必需的属性”

vs2008中的错误 1 找不到类型或命名空间名称“Graphics”(是不是缺少 using 指令或程序集引用?)怎么解决?急

JSON 消息对象缺少 id 属性

将 AngularJS 对象作为 TypeScript 类注入(缺少方法)

MySQL 5.7 JSON_EXTRACT 不适用于对象中的带引号的字符串:[错误]“字符串中缺少右引号”

Hive 创建表:解析 json 文件时解析错误缺少“>”