【问题标题】:How do you tell if a JSON object is an array or not?如何判断 JSON 对象是否为数组?
【发布时间】:2013-11-23 01:22:17
【问题描述】:

我已使用 JSON.NET 中的 .ToJSON() 将我的 XML 转换为 JSON

这会将具有多个 2 或更多 xml 元素的事物转换为数组,而单个元素则不是。

<trendstats>
        <paramFile version=\"1.0\" createdBy=\"PowerStats v1.0\" test=\"ohoh\">
        </paramFile>
</trendstats>

变成:

"trendstats": {
    "paramFile": {

同时:

<trendstats>
        <paramFile version=\"1.0\" createdBy=\"PowerStats v1.0\" test=\"ohoh\">
        </paramFile>
        <paramFile version=\"1.0\" createdBy=\"PowerStats v1.0\" test=\"ohoh\">
        </paramFile>
</trendstats>

变成:

"trendstats": {
    "paramFile": [ {

如何区分它们?

【问题讨论】:

  • 对于可能觉得它有用的其他人:除了此页面上的答案,另请参阅@chris 的相关问题的this answer,它解释了为什么会发生这种情况并提供处理它的替代解决方案.

标签: c# .net xml json json.net


【解决方案1】:

page 向您展示了如何告诉 JSON.NET 强制 xml 元素始终生成数组。这样,您就不必猜测它是什么类型了。

【讨论】:

  • 我正在使用 JSON.NET 我没有长度属性。 JToken 令牌 = JObject.Parse(json);然后使用 token[".."].lenght 不存在
  • 知道了。 james.newtonking.com/json/help/index.html 搜索“强制属性”它将解决您遇到的数组或对象问题。
  • 我还是没看到,是不是漏了什么?
  • “属性强制 JSON 数组”部分的第 23 行:&lt;role json:Array='true'&gt;Admin&lt;/role&gt;
  • 我对 C# 没有长度属性的断言有点困惑......如果是这样,这里发生了什么:msdn.microsoft.com/en-us/library/…
【解决方案2】:

所以在我看来你有几个选择:

  1. 找出 paramFile 中有多少元素。我不禁想知道它是否有 .Length 而不是 .length (案例)。这表明确实如此。 http://msdn.microsoft.com/en-us/library/system.array.length(v=vs.110).aspx
  2. 按照 rdodev 的建议,通过更改 xml 来强制它成为其中之一。
  3. 强制它成为 C# 中的一种或另一种 - 尽管当您这样做并弄清楚它会给您带来什么样的错误时,您将有一个可以使用的测试。

我不是 C# 程序员,但这个问题引起了我的兴趣。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多