2012-06-05 30 views
14

我學習JSON和我想知道,這是寫一多維JSON對象,它是nested.I寫的正確方法:如何寫一個嵌套的多維JSON對象

var foo = { 
    "logged_in":true, 
    "town":"Dublin", 
    "state":"Ohio", 
    "country":"USA", 
    "products":2, 
    "0":{ 
     "pic_id":"1500", 
     "description":"Picture of a computer", 
     "localion":"img.cloudimages.us/2012/06/02/computer.jpg", 
     "type":"jpg", 
     "childrenimages":2 

     "0":{ 
     "pic_id":"15011", 
     "description":"Picture of a cpu", 
     "localion":"img.cloudimages.us/2012/06/02/mycpu.png", 
     "type":"png" 
      } 
     "1":{ 
     "pic_id":"15012", 
     "description":"Picture of a cpu two", 
     "localion":"img.cloudimages.us/2012/06/02/thiscpu.png", 
     "type":"png" 
      } 
    }, 
    "1":{ 
     "pic_id":"1501", 
     "description":"Picture of a cpu", 
     "localion":"img.cloudimages.us/2012/06/02/cpu.png", 
     "type":"png" 
    } 
}; 

這是正確的或者如果我的對象變得太深嵌套,我是否應該遵循一個慣例。

+1

你分配一個對象值,其名稱所暗示的,它擁有一個字符串值... –

+0

如果你指的是「0」和「1」來表示數組你將對象的變量我們使用數組符號'[]'並且不指定「0」或「1」。類似於https://gist.github.com/2875889請注意,您寫的內容存在很多小問題,這些問題突出了下面提到的觀點....不寫JSON。 –

+0

感謝詹姆斯的精華。 – Gandalf

回答

19

考慮使用數組而不是數字對象。

陣列在JSON被定義使用[] http://www.json.org/

下面是一個例子:

var foo = { 
    "logged_in":true, 
    "town":"Dublin", 
    "state":"Ohio", 
    "country":"USA", 
    "products": 
    [ 
     { 
      "pic_id":"1500", 
      "description":"Picture of a computer", 
      "localion":"img.cloudimages.us/2012/06/02/computer.jpg", 
      "type":"jpg", 
      "childrenimages": 
      [ 
       { 
        "pic_id":"15011", 
        "description":"Picture of a cpu", 
        "localion":"img.cloudimages.us/2012/06/02/mycpu.png", 
        "type":"png" 
       }, 
       { 
        "pic_id":"15012", 
        "description":"Picture of a cpu two", 
        "localion":"img.cloudimages.us/2012/06/02/thiscpu.png", 
        "type":"png" 
       } 
      ] 
     }, 
     { 
      "pic_id":"1501", 
      "description":"Picture of a cpu", 
      "localion":"img.cloudimages.us/2012/06/02/cpu.png", 
      "type":"png" 
     } 
    ], 
}; 

(原諒我忘記或者關閉{或[或,它非常難以在輸入代碼SO:p)

這樣,你甚至不必須計數像

"products":2, 

"childrenimages":2 

你根本

foo.products.length 

foo.products[0].childrenimages.length 

祝你好運:)

+1

這實際上是一個明智的建議,使用數字索引作爲對象屬性名稱是沒有意義的。 –

-1

不要寫JSON。嚴重的是,除了簡單的配置文件,不要寫JSON。

您有工具可以將對象轉換爲大多數語言的JSON字符串(如果沒有的話)。

PHP:json_encode($array);

的Javascript:JSON.stringify(obj);

等等

寫作JSON手動往往導致語法錯誤。那種讓你頭痛的東西,直到你看到缺少逗號或w/e。你有很好的工具來做到這一點,使用它們。您可以將其與XML進行比較,但JSON沒有工具(IDE,文本編輯器)在輸入時會顯示「此語法錯誤」。例如,沒有編輯會告訴你,你使用單引號而不是雙引號。

只是不寫JSON。

+1

對於編寫JSON,你有什麼聲明?我的答案中沒有看到任何意義。 –

+0

由於手動編寫JSON通常會導致錯誤,如果您使用大多數語言提供的方法,這些錯誤不會發生。爲什麼冒着這種錯誤避免它們? –

+0

@skwee你確定嗎?他建議你在語言中創建一個本地對象,然後將Json串聯起來:P所以你正在做的是實際寫JSON的方式,它不會失敗和錯誤 – ShrekOverflow

0

這裏是爲您的數據格式正確(注意:我改變了一些數據本身)

{ 
    "logged_in":true, 
    "town":"Dublin", 
    "state":"Ohio", 
    "country":"USA", 
    "products":2, 
    "productinfo":[ 
     { 
      "0":{ 
       "pic_id":"1500", 
       "description":"Picture of a computer", 
       "localion":"img.cloudimages.us/2012/06/02/computer.jpg", 
       "type":"jpg", 
       "childrenimages":2 
      }, 
      "1":{ 
       "pic_id":"15011", 
       "description":"Picture of a cpu", 
       "localion":"img.cloudimages.us/2012/06/02/mycpu.png", 
       "type":"png" 
      }, 
      "2":{ 
       "pic_id":"15012", 
       "description":"Picture of a cpu two", 
       "localion":"img.cloudimages.us/2012/06/02/thiscpu.png", 
       "type":"png" 
      }, 
      "3":{ 
       "pic_id":"1501", 
       "description":"Picture of a cpu", 
       "localion":"img.cloudimages.us/2012/06/02/cpu.png", 
       "type":"png" 
      } 
     } 
    ] 
} 
0

實際上並不是說你必須有一個數組,這只是包含也是對象屬性的對象。你也錯過了一些逗號,所以這甚至不能編譯。

在這種情況下可能更方便的是使用數組和對象來組成你的JSON。例如:

var this_json_string = { 
    "state":"Ohio", 
    "country":"USA", 
    "products":[ 
     { 
      "pic_id":"1500", 
      "description":"Picture of a computer", 
     }, 

     { 
      "pic_id":"15011", 
      "description":"Picture of a cpu" 
     }, 
     { 
      "pic_id":"15012", 
      "description":"Picture of a cpu two" 
     }, 
     { 
      "pic_id":"1501", 
      "description":"Picture of a cpu" 
     } 
    ] 
};