【问题标题】:JSON parse error: Missing a name for object memberJSON 解析错误:缺少对象成员的名称
【发布时间】: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 使用",而不是'
  • 您的原始数据输入也不是有效的 JSON。数组用 [ ] 语法表示。
  • 谢谢大家,困惑之一是为什么如果 {"username": "1"} 有效,ToJson 会返回 {'username': '1'}。

标签: c# json json-deserialization


【解决方案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);
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-03-11
        • 1970-01-01
        • 2018-03-19
        • 1970-01-01
        • 1970-01-01
        • 2021-03-31
        • 1970-01-01
        • 2018-08-17
        相关资源
        最近更新 更多