如何判断一个 JSON 对象是否为数组?

3
我已经使用JSON.NET中的.ToJSON()将我的XML转换为JSON。
这将把具有两个或更多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": [ {

我该如何区分它们?

1
对于其他可能会发现有用的人:除了本页面上的答案外,还可以参考@chris相关问题的此答案,该答案解释了为什么会出现这种情况,并提供了另一种处理它的替代方案。 - Brian Rogers
2个回答

1

这个页面向您展示如何告诉JSON.NET强制xml元素始终生成数组。这样,您就不必猜测它的类型。


明白了。请访问http://james.newtonking.com/json/help/index.html并搜索“attribute to force”,它将解决您遇到的数组或对象问题。 - rdodev
我还是看不到,我有什么遗漏吗? - cdub
1
在“强制JSON数组的属性”部分的第23行:<role json:Array='true'>Admin</role> - rdodev
它确实具有长度属性,但我们没有使用数组。我们正在使用来自JSON.NET的令牌,这是一个类。 - cdub
当我向组件添加xmlns和json:force数组时,它就可以工作了,现在解析也可以了,谢谢。 - cdub
显示剩余2条评论

0

看起来你有几个选择:

  1. 找出paramFile中有多少元素。我不禁想知道它是否有.Length而不是.length(大小写)。这会表明它确实有。http://msdn.microsoft.com/en-us/library/system.array.length(v=vs.110).aspx
  2. 按照rdodev的建议更改xml,强制其成为其中之一。
  3. 在c#中强制其成为其中之一-尽管到你这样做并弄清楚它会给你什么样的错误之前,你将拥有一个可以使用的测试。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接