【问题标题】:How to pass JSON string as array如何将 JSON 字符串作为数组传递
【发布时间】:2023-02-01 22:56:27
【问题描述】:
[
    {"id": 1, "name": "danny_devito", "img": "/images/1"},
    {"id": 2, "name": "jim_carey", "img": "/images/2"},
    {"id": 3, "name": "tyler_1", "img": "/images/3"}
]
 [System.Serializable]
    public class Players {
        public int id;
        public string name;
        public string img;
    }

    [System.Serializable]
    public class PlayersArray {
        public Players[] playersData;
    }
string playersJson = File.ReadAllText(Application.dataPath + "/playersFile.json");
        PlayersArray loadedPlayerData = (PlayersArray)JsonUtility.FromJson<PlayersArray>(playersJson);

        Debug.Log("Danny Boy: " + loadedPlayerData.playersData[0].name);

按照大量教程进行操作,但没有一个有效!请帮助

it gives me this error

试了很多方法,还是不行

【问题讨论】:

  • 您的 JSON 是数组,但 PlayersArray 是对象。

标签: c# arrays json


【解决方案1】:

您正在尝试反序列化一个对象。但是您显示的 JSON 不是对象。它是一个数组。将其反序列化为一个集合:

var loadedPlayerData = JsonUtility.FromJson<List<Players>>(playersJson);

或者甚至只是一个数组:

var loadedPlayerData = JsonUtility.FromJson<Players[]>(playersJson);

顺便说一句......名字很重要。 Players 是误导性名称一个玩家.该类应该改为Player


另外,这个类可能根本不反序列化,具体取决于 JSON 序列化程序的工作方式。他们倾向于使用特性, 不是字段.无论如何你可能想要使用属性:

public class Players {
    public int id { get; set; }
    public string name { get; set; }
    public string img { get; set; }
}

为了进一步改进,您可能还希望将属性名称大写。 JSON序列化器可能区分大小写(我不认为它们默认情况下是这样,但值得测试)并且您可能需要向属性添加属性以在 JSON 中指定它们的名称。但只是为了获取代码在职的,至少您很可能需要此处的属性而不是字段。

【讨论】:

    【解决方案2】:

    您遇到的错误可能是因为未正确读取 JSON 文件或 JSON 字符串的格式不正确。

    以下是一些需要检查的事项:

    1. 验证 JSON 文件的路径:确保文件的路径 是正确的,文件存在于指定位置。

    2. 验证 JSON 字符串:确保 JSON 字符串是正确的 格式并且所有字段和值都正确包含在 引号。

    3. 验证类结构:确保类结构 对应于 JSON 字符串,并且所有字段都被命名为 在类和 JSON 字符串中的方式相同。

      这是代码的更新版本:

      string playersJson = File.ReadAllText(Application.dataPath + "/playersFile.json");
      
      if (playersJson == null) {
          Debug.LogError("Could not read JSON file");
          return;
      }
      
      PlayersArray loadedPlayerData = JsonUtility.FromJson<PlayersArray>(playersJson);
      
      if (loadedPlayerData == null) {
          Debug.LogError("Could not parse JSON string");
          return;
      }
      
      Debug.Log("Danny Boy: " + loadedPlayerData.playersData[0].name);
      

      这段代码首先检查 JSON 文件是否被正确读取,如果没有,它会记录错误。然后它检查 JSON 字符串是否已成功解析为 PlayersArray 对象,如果没有,它会记录另一个错误。

    【讨论】:

    • 3 分钟内创建了大量文本。可惜一切都是错的
    猜你喜欢
    • 1970-01-01
    • 2021-05-03
    • 2021-04-05
    • 2013-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-14
    相关资源
    最近更新 更多