我尝试使用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/ 所有数据都可见。
任何人都知道错误或如何获取缺失的数据?
谢谢
答案 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());
}
我得到了这些对象的输出/提示:
但我没有[船舶]数据或其子结构之一
我不知道问题是什么。你有提示吗?
修改强>
我在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() 我的系统没有工作: - /