解析JSON - 但是错过了一些数组

时间:2016-05-10 20:20:58

标签: c# json parsing json.net deserialization

我尝试使用Newtonsoft软件包解析JSON字符串 它来自" Elite Dangerous Companion"接口。
一切似乎都很好,但现在我已经确定了 生成的JSON对象中不存在两个数组。

我的解析代码:

String json = response.Json ?? "{}";
JObject m_joCompanion = JObject.Parse(json);

您可以下载the JSON-string here

缺少的部分是

  

" lastStarport" - "船舶" - " shipyard_list"

  

" lastStarport" - "船舶" - " unavailable_list"

如果我在线解析字符串 https://jsonformatter.curiousconcept.com/ 所有数据都可见。

任何人都知道错误或如何获取缺失的数据?

谢谢

2 个答案:

答案 0 :(得分:0)

其他人注意:JSON文件的长度是7400+,所以我不知道你是否想要直接发布,也许OP可以发布到pastebin或其他东西。

您使用的是什么.NET版本和Newtonsoft.Json?我尝试使用.NET 4.5.2和Newtonsoft.Json版本8.0.3,我可以很好地导航到这些对象。

我运行了以下内容:

        var jsonText = File.ReadAllText(@"C:\Users\me\Downloads\companion.json");
        var m_joCompanion = JObject.Parse(jsonText);

        Console.WriteLine(m_joCompanion["lastStarport"]["ships"]["shipyard_list"]);
        Console.WriteLine(m_joCompanion["lastStarport"]["ships"]["unavailable_list"]);

它肯定会输出一些数据。您在文件中发布的内容与您的response.Json属性之间的编码或某些内容是否存在差异?

答案 1 :(得分:0)

接下来尝试: - )

好吧,我发现VS持有错误的dll版本(不知道为什么) 但是,现在我正在研究正确的版本(在bin路径中找到v8.0.3.19514) - 但这并没有解决我的问题:-(

我做了以下测试:

                Debug.Print(m_joCompanion["lastStarport"].Children().Count());
                foreach (var item in m_joCompanion["lastStarport"].Children())
                {
                    Debug.Print(item.ToString());                        
                }

我得到了这些对象的输出/提示:

  • lastStarport有5个孩子(应该是6个!)
  • 孩子1:“id”:“3226125568”
  • 孩子2:“名字”:“田中终端”
  • 孩子3:“派系”:“独立”
  • 孩子4:“商品”:[]
  • 孩子5:“模块”:{}

但我没有[船舶]数据或其子结构之一

我不知道问题是什么。你有提示吗?

修改
我在https://jsonformatter.curiousconcept.com/做了另一个 换了标准:

RFC 7159:5个孩子(没有船只 - 数据)
RFC 4627:6个孩子(船只数据存在)

我可以在Newtonsoft中切换它吗?

编辑2

我尝试了这个并且它有效!

Newtonsoft.Json.Linq.JObject test = JsonConvert.DeserializeObject<Newtonsoft.Json.Linq.JObject>(json);

但我仍然没有解释为什么旧版本的.Parse() 我的系统没有工作: - /