我在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"}]}]
如何判断它是数组还是对象?
答案 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并点击格式按钮。这样你就有一半的机会搞清楚代码的结构。