【问题标题】:How to convert Json file to Dictionary using C#-Unity如何使用 C#-Unity 将 Json 文件转换为字典
【发布时间】:2019-10-05 21:50:49
【问题描述】:

我正在尝试在 Unity-C# 中获取 Json 数据集并将其转换为字典

{
1:
    {
        "uni_number": 001,
        "level" : 3,
        "Hp" : 15
    },
    2:
    {
        "uni_number": 000,
        "level" : 0,
        "Hp" : 0
    }
}

(如果需要,我可以使用 intigers 字符串)当我想保存游戏时,我还需要将字典文件转回 json 文件。

我检查了几个不同的 StackOverflow 问题,但我似乎无法弄清楚。我尝试使用 JsonUtility 将其解析为字典。

这是我要转成字典的json文件

string json = @"1:{""uni_number"": 001,""level"" : 3,""Hp"" : 15},2:{""uni_number"": 000,""level"" : 0,""Hp"" : 0}";

这是我尝试过的事情之一,如果我可以让它工作,而不是在我添加另一个深度之后我应该能够从那里完成它。

string json = @"{""uni_number"": ""001"",""level"" : ""3"", ""Hp"": ""15""}";

Dictionary<string, string> loadedData = JsonUtility.FromJson<Dictionary<string, string>>(json);

这不会给我一个错误,但是当我尝试打印它时,它什么也没打印。这是我的打印方式。

foreach (KeyValuePair<string, string> kvp in loadedData)
        {
            print("Key = {0}, Value = {1}");
            print(kvp.Key);
            print(kvp.Value);
        }

我也试过

string loadedData = JsonUtility.FromJson<string>(@"{""uni_number"": ""001"",""level"" : ""3"", ""Hp"": ""15""}");

print (loadedData)

它不打印任何东西,所以我认为我使用 JsonUtility 函数错误,但我不知道如何。

如果我不能让它工作,我可能会制作我自己的函数,将 json 文件转换为字典,但这可能会很麻烦。

【问题讨论】:

  • 您发布的 JSON 远不能转换为 Dictionary&lt;string, string&gt;,而是 Dictionary&lt;int, object&gt;,但当然,您应该创建一个类而不是使用对象
  • @MyNameIsntBob 我不确定我是否理解您的需求,但如果您的密钥应该是 "1", "2" 等,那么您可以尝试这样做:string json = @"{""1"":{""uni_number"": 001,""level"" : 3,""Hp"" : 15},""2"":{""uni_number"": 000,""level"" : 0,""Hp"" : 0}}"; Dictionary&lt;string, object&gt; obj = JsonConvert.DeserializeObject&lt;Dictionary&lt;string, object&gt;&gt;(Convert.ToString(json)); 为了使用它,您应该使用Newtonsoft.Json的Nuget包

标签: c# json dictionary unity3d


【解决方案1】:

我正在使用 Newtonsoft.Json 并且它有效: (请注意,每个值也是一个字典(键、值对))

     string json = @"{
                    1:
                    {
                        ""uni_number"": 001,
                        ""level"" : 3,
                        ""Hp"" : 15
                    },
                    2:
                    {
                        ""uni_number"": 000,
                        ""level"" : 0,
                        ""Hp"" : 0
                    }
                    }";

        var values = JsonConvert.DeserializeObject<Dictionary<string, Dictionary<string,string>>>(json);
        foreach (var uni in values)
        {
            //you can print values here or add to a list or ...
              string uni_number=  uni.Value["uni_number"];
              string level=  uni.Value["level"];
              string Hp=  uni.Value["Hp"];

        }

【讨论】:

  • 所以我安装了 Newtonsoft.Json,并将其导入 using Newtonsoft.Json;,现在代码没有给我错误,但是,统一起来,它指向那条线并说 ...error CS0246: The type or namespace name 'Newtonsoft' could not be found. Are you missing an assembly reference?"跨度>
  • 很高兴您能找到答案,如果您可以保存到文本文件并从中检索,那么您的解决方案就可以了。我使用 PlayerPrefs 保存转换为字符串的序列化字典并且它有效。如果您觉得我的回答有帮助,可以将其标记为答案,谢谢
  • 好的,我已经解决了。事实证明,除非您下载其中一个资产,否则统一不会让您使用它,链接以防任何人需要它。 assetstore.unity.com/packages/tools/input-management/…
  • 太棒了!只是需要我的触摸。
猜你喜欢
  • 2011-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-28
  • 1970-01-01
  • 1970-01-01
  • 2011-06-15
相关资源
最近更新 更多