确定单个值或子数组JSON

时间:2013-05-10 01:01:10

标签: jquery asp.net-mvc json

我有一个算法将一个对象从MVC(C#)绑定到视图。密钥和数据可以是任何东西,这取决于实施者。

我遇到的问题是我无法确定JSON字符串中的某些内容是数组还是简单字符串。以下代码递归地工作。如果是阵列,则需要深入挖掘。否则,它将根据键和值绑定它找到的值。

function constructView(data)
{
    for(var key in data)
    {
        if (data[key].length > 1)
        {
            var count = 0;

            while (count < data.length)
            {
                constructView(data[count]);
                count++;
            }
        }
        $("#" + key).html(data[key]);
    }
}

这只是一个原型,所以目前它不会生成组件,只是简单地进行绑定。

好的,问题是:

当我通过时

{"data":"this is a response","strings":["test1","test2"]}

它返回18和2的长度。这是因为两者在技术上都是有效长度的数组。

有没有办法获得物品长度?它将单个字符串视为1个项目,将数组视为其各自的项目计数?

我可以验证JSON数组是否正确传入。

非常感谢任何帮助!

4 个答案:

答案 0 :(得分:4)

Array.isArray(x)

会检查数组,但如果您需要支持旧版浏览器,则需要使用polyfill(非常容易找到)。

typeof x === "string"

将表示一个字符串

答案 1 :(得分:1)

在现代的ES5兼容实现中,有Array.isArray

var a = [];
Array.isArray(a); // true

在较旧的实现中,您需要这个丑陋的解决方法:

function isArray(a) {
    return ({}).toString.call(a) === "[object Array]";
    // or: 
    // return Object.prototype.toString.call(a) === "[object Array]";
}

答案 2 :(得分:0)

请参阅其他答案,但如果您不想担心polyfill,您似乎已经在使用jQuery(继续使用$(...).html(...)),那么为什么不使用jQuery's $.isArray() function?< / p>

答案 3 :(得分:0)

由于您使用的是JQuery,因此可以使用:

if ($.type(data[key])==="array")
相关问题