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 指令或程序集引用?)怎么解决?急
将 AngularJS 对象作为 TypeScript 类注入(缺少方法)