JSON数据是一个对象还是一个数组,如何检查?

时间:2012-06-22 14:04:07

标签: json

我在Joomla应用程序中使用jQuery小部件。窗口小部件的数据必须是对象和json格式。当我直接从数据库检索数据而没有Joomla框架的数据库功能时,我能够实现这一点。

当然,我确实想在Joomla MVC结构中完成它,我想利用Joomla数据库函数。执行此操作时,窗口小部件中没有输出。

我之前有这个作为数组传递时,它不显示数据,当作为对象传递时,它确实如此。

我的问题是: 直接从数据库生成数据并使用Joomla数据库结构在回显到屏幕时产生完全相同的结果,但一个显示在网格中而另一个不显示。我之前的问题就是这种情况,但在这种情况下,我在相同的数据上调用了两次json_encode,但显示的数据完全没有区别,但是一个有用,另一个没有。

我的问题: 我对JSON数据还不是很熟悉,但有没有办法检查数据是表示为对象还是数组?这可能是一个非常愚蠢的问题,但在我看来,数据必须有所不同,只是看一下,你就看不到它,或者我错过了什么?

更新: 的 谢谢你的回复。我已经坐了好几天了!!它现在正在使用Joomla数据库函数,似乎除了json编码之外我的代码存在一个小问题,但是当我在模型和控制器中使用json_encode之前它们看起来完全一样,因此双json编码它,它不起作用,但在Joomla之外生成时,它工作(单独使用json_encoding)。看看它们在Joomla之外生成并且在双json编码之后,两者看起来都一样,因此我无法找到输出的问题,就像现在一样。

感谢有关[]{}的信息,这是有见地的,但这是我的代码示例:

   [{"TotalRows":2,"Rows":[{"login_id":"122","cust_id":"0","shop_id":"0","nickname":null,"shopicon":null,"website":null,"shopname":null, "username":"","password":"","dob":"0000-00-00","comments":null},
{"login_id":"25","cust_id":"57","shop_id":"42","nickname":"qwerty","shopicon":"shop.ico","website":"http:\/\/www.shop.co.uk","shopname":"Shop","username":"eqweq","password":"wqewqeq","dob":"1981-12-14","comments":"qwqeqeqw"}]}]

如何判断它是数组还是对象?

4 个答案:

答案 0 :(得分:3)

以下代码用于获取所有键并检查关联值的形式为数组或json对象或字符串值。

Iterator<?> rootIter = jsonData.keys();
while (rootIter.hasNext())
{
   String name = (String) rootIter.next();
   Object obj = jsonData.get(name);
   if (obj instanceof JSONObject)
   {
      JSONObject jsonObj = (JSONObject) obj;
   }
   else if(obj instanceof JSONArray)
   {
       JSONArray jsonArray = (JSONArray) obj;
   }
   else
   {
      String values = obj.toString();
   }           
}

答案 1 :(得分:1)

如果您有JSON字符串,则只需检查第一个非空白符号是{还是[{意味着顶级是常规对象(请记住,数组也是对象!),[ - 数组。您还可以将其解析为对象,并检查结果是否为instanceof Array

答案 2 :(得分:0)

他们应该是非常不同的:

var arr = [1, 2, 3, 4];
console.log(JSON.stringify(arr)); // prints "[1,2,3,4]"
var obj = { a: 1, b: 2, c: 3, d: 4 };
console.log(JSON.stringify(obj)); // prints "{"a":1,"b":2,"c":3,"d":4}".

你能否展示一些输入和输出(和一些代码),以便我们看到发生了什么?

答案 3 :(得分:0)

对不起user1154041,这不是一个答案,但它可能会帮助你看到树木。当开发人员获得准备部署的JavaScript(或子集JSON)时,他们会“缩小”它,这意味着删除所有空格。它对JavaScript引擎没有任何影响,但我们人类很难阅读。重新格式化一段缩小的代码有时被称为“美化”,而过程过去需要使用特殊工具。这些天我使用的所有编辑器都有一个'format'函数,它接受一些JavaScript或JSON,就像你的例子一样,并以一个更易读的形式格式化它,就像下面的例子一样(我必须添加var语句才能使它成为有效的JavaScript所以我的编辑了解该做什么):

var test = [{
    "TotalRows": 2,
    "Rows": [{
        "login_id": "122",
        "cust_id": "0",
        "shop_id": "0",
        "nickname": null,
        "shopicon": null,
        "website": null,
        "shopname": null,
        "username": "",
        "password": "",
        "dob": "0000-00-00",
        "comments": null
    }, {
        "login_id": "25",
        "cust_id": "57",
        "shop_id": "42",
        "nickname": "qwerty",
        "shopicon": "shop.ico",
        "website": "http://www.shop.co.uk",
        "shopname": "Shop",
        "username": "eqweq",
        "password": "wqewqeq",
        "dob": "1981-12-14",
        "comments": "qwqeqeqw"
    }]
}]

我知道你仍然要习惯[]表示一个数组和{}一个对象的事实,但是你不同意它更容易看到吗?所以,当你对这样的字符串感到困惑时,打开像Aptana http://www.aptana.com这样的IDE,用于编辑JavaScript。创建一个JavaScript文件,将字符串分配给var并点击格式按钮。这样你就有一半的机会搞清楚代码的结构。