1

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

当然,我确实想在 Joomla MVC 结构中进行,并且我想利用 Joomla 数据库功能。这样做时,小部件中没有输出。

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

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

我的问题:我对 JSON 数据还不是很熟悉,但是有没有办法检查数据是表示为对象还是数组?这可能是一个非常愚蠢的问题,但在我看来,数据肯定存在差异,仅通过查看它,您就看不到它,还是我遗漏了什么?

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

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

   [{"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

4 回答 4

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();
   }           
}
于 2012-09-25T11:03:59.817 回答
1

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

于 2012-06-22T14:40:32.480 回答
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}".

您能否显示一些输入和输出(以及一些代码),以便我们了解发生了什么?

于 2012-06-22T14:08:49.063 回答
0

抱歉,user1154041,这不是一个完全正确的答案,但它可能会帮助您看到树木的木材。当开发人员准备好一段 JavaScript(或 JSON 子集)以进行部署时,他们会“缩小”它,这意味着删除所有空格。它对 JavaScript 引擎没有影响,但我们人类很难阅读。重新格式化一段缩小的代码有时被称为“美化”,这个过程过去需要特殊的工具。这些天来,我使用的所有编辑器都有一个“格式”函数,它像您的示例一样采用 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 并点击格式按钮。这样你就有一半的机会弄清楚代码的结构。

于 2012-06-22T14:49:10.717 回答