【问题标题】:Read json file from SreamingAssets folder [duplicate]从 SreamingAssets 文件夹中读取 json 文件 [重复]
【发布时间】:2018-10-25 03:03:26
【问题描述】:

我遇到了 Unity 的 FromJson 方法的问题。从错误中我假设我编写的 JSON 有问题,但我无法终生弄清楚它是什么。首先,这是错误

ArgumentException: JSON parse error: Invalid value.
UnityEngine.JsonUtility.FromJson[ShipTypes] (System.String json) (at C:/buildslave/unity/build/artifacts/generated/bindings_old/common/JSONSerialize/JsonUtilityBindings.gen.cs:25)
DataLoader.LoadShipsFromJSON () (at Assets/Scripts/Data/DataLoader.cs:38)
DataLoader.Awake () (at Assets/Scripts/Data/DataLoader.cs:19)

接下来是代码(最后一行是Dataloader.cs:38)

ShipTypes shipTypes;
string path = Application.streamingAssetsPath + "/ShipTypes.json";
shipTypes = JsonUtility.FromJson<ShipTypes>(path);

这是我的课程

[System.Serializable]
public class ShipTypes
{
    public List<Ship> ships;
}

[System.Serializable]
public class Ship
{
    public string name;
    public int attack;
    public int defense;
    public int speed;
    public int range;
}

最后是我的 JSON

{
  "ships" : 
    [
        {
            "name": "Corvette",
            "attack" : 2,
            "defense" : 7,
            "speed" : 20,
            "range" : 8
        },
        {
            "name": "Frigate",
            "attack" : 4,
            "defense" : 6,
            "speed" : 10,
            "range" : 8
        },
        {
            "name": "Destroyer",
            "attack" : 8,
            "defense" : 8,
            "speed" : 10,
            "range" : 8
        },
        {
            "name": "Dreadnought",
            "attack" : 14,
            "defense" : 10,
            "speed" : 7,
            "range" : 8
        },
        {
            "name": "Battleship",
            "attack" : 20,
            "defense" : 12,
            "speed" : 5,
            "range" : 8
        }
    ]
}

非常感谢。

【问题讨论】:

  • 请粘贴错误,非常相关的信息
  • 对不起,添加了错误。
  • 问题是你提供了一个文件路径,你应该提供文件内容,而不是路径。首先将文件读入字符串 (File.ReadAllText),然后将该文本传递给转换器。
  • 查看副本中的 loadStreamingAsset 函数,了解如何从流资产文件夹中读取文件

标签: c# json parsing unity3d


【解决方案1】:

修复是加载内容,调用需要 JSON 文本,而不是文件路径:

ShipTypes shipTypes;
string path = Application.streamingAssetsPath + "/ShipTypes.json";
string contents = File.ReadAllText(path);
shipTypes = JsonUtility.FromJson<ShipTypes>(contents);

【讨论】:

  • 请注意,某些平台 File.ReadAllText 不能用于从流资产文件夹中读取,因此使用 WWW 或 UnityWebRequest 来处理。
  • @Programmer,这是一条很好的信息
  • 老实说,我不敢相信我忘了实际获取文本。非常感谢。
【解决方案2】:

您应该为以下方法提供 JSON 内容而不是 JSON 文件的路径→

JsonUtility.FromJson<T>(json_content_in_string);

所以建议你先阅读内容

string path_to_json  = Application.streamingAssetsPath + "/ShipTypes.json";
string json_contents = File.ReadAllText(path_to_json);

然后转换

shipTypes = JsonUtility.FromJson<ShipTypes>(json_contents);

【讨论】:

    猜你喜欢
    • 2019-12-27
    • 1970-01-01
    • 2019-04-22
    • 1970-01-01
    • 2018-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-15
    相关资源
    最近更新 更多