2012-06-22 83 views
1

我在Joomla應用程序中使用jQuery小部件。小部件的數據必須是一個對象並且採用json格式。當我從數據庫中直接檢索數據而沒有Joomla框架的數據庫功能時,我能夠做到這一點。JSON數據對象還是數組,如何檢查?

當然,我確實希望在Joomla MVC結構中做到這一點,並且我想利用Joomla數據庫功能。做這件事時,小部件中沒有輸出。

我之前有過這種情況時,作爲一個數組傳遞,它不會顯示數據,當它作爲一個對象傳遞時,它會。

我的問題是這樣的: 直接從數據庫生成數據並使用Joomla數據庫結構產生完全相同的結果,當回顯到屏幕,但一個顯示在網格中,另一個不是。前一個問題也是如此,但在這種情況下,我在相同的數據上調用了兩次json_encode,但顯示的數據完全沒有區別,但其中一個可以工作,另一個不可以。

我的問題: 我不熟悉JSON數據,但有沒有辦法來檢查數據是表示爲對象還是數組?這可能是一個非常愚蠢的問題,但在我看來,數據中必然存在差異,並且只是看着它,你無法看到它,或者我錯過了什麼?

UPDATE: 感謝您的答覆。我已經坐了好幾天了!它現在與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"}]}] 

我怎樣才能從這個判斷它是否是一個數組或對象?

+2

{} = object,[] = array。樣本會很有幫助。此外,你可以檢查這裏的語法:http://jsonlint.com/ –

+0

看起來很體面直觀... Joomla數據庫結構並不困難。你需要使用'$ db-> setQuery($ query);'和'$ result = $ db-> loadObject()';現在你已經有了一個php對象。簡單地使用echo'json_encode($ result);'將輸出一個json對象給客戶端,然後可以使用'$ .parseJSON'來解析,或者如果你使用的是ajax,'set the dataType =「json」'和它會自動解析它。那麼你可以通過'obj.prop'來訪問對象屬性。 – Ohgodwhy

+0

詳細闡述@Diodeus所說的... {}是一個對象,但是,它也可以是一個字符串,如果它封裝在''''中。這是一個JSON字符串,不是一個對象。 – Ohgodwhy

回答

1

如果您有JSON字符串,則可以簡單檢查第一個非空白符號是否爲{[{意味着頂層是常規對象(請記住,數組也是對象!),[ - array。您也可以將其解析爲對象,並檢查結果是否爲instanceof Array

+0

因此'[{'意味着一個對象數組? – jmarais

+0

數組與對象,因爲它是第一個元素。它可以很容易地跟隨下一個元素作爲數組,或簡單的數字或字符串。喔! –

+0

好!那麼'[{},{},{},{},{}]'是數組的對象嗎?和[[{[{},{},{},{},{}]}]'是一個包含一個對象的數組,並且該對象包含對象數組? – jmarais

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}". 

能否請你表現出一定的輸入和輸出(和一些代碼),所以我們可以看到發生了什麼?

+0

想要回應@Oleg,但放錯了位置。 – jmarais

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" 
    }] 
}] 

我知道你還是要習慣這樣的事實:[]表示數組,{}對象,但你不同意這是要容易得多看到?所以,當你對這樣的字符串感到困惑時,打開一個IDE,如Aptana http://www.aptana.com,它是爲編輯JavaScript而設計的。創建一個JavaScript文件,將該字符串分配給一個var並點擊格式按鈕。這樣你就有一半的機會來弄清代碼的結構。

+0

行!那麼'[{},{},{},{},{}]'是數組的對象嗎? – jmarais

+0

@ user1154041沒錯!現在看更容易,不是嗎?但是,正如Oleg指出的那樣,一個對象可以很容易地跟隨一個字符串或一個數組。例如[{},{},「hello」,[「a」,「b」]}。 JavaScript數組的每個元素都可以是您喜歡的任何類型。 JSON有點嚴格但基本上是相同的想法。不管它是什麼,美化或格式化都可以讓人更容易理解。 – DavidHyogo

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(); 
    }   
} 
相關問題