Cum se scrie un obiect json multidimensional imbricate (Programare, Jquery, Json)

Gandalf a intrebat.
a intrebat.

Studiez json și mă întrebam dacă acesta este modul corect de a scrie un obiect json multidimensional care este imbricate.Am scris:

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

Este acest lucru corect sau există o convenție pe care ar trebui să o urmez dacă obiectul meu devine prea adânc imbricate.

Comentarii

  • Atribuiți o valoare de obiect unei variabile al cărei nume implică faptul că deține o valoare de șir de caractere… –  > Por Šime Vidas.
  • Dacă vroiai să spui „0” și „1” pentru a reprezenta obiectele dintr-o matrice, ai folosi notația de matrice [] și nu ați specifica „0” sau „1”. Ceva de genul gist.github.com/2875889 Rețineți, există o mulțime de mici probleme cu ceea ce ați scris, ceea ce subliniază punctul de vedere prezentat mai jos….don’t write JSON. –  > Por James P. Wright.
4 răspunsuri
Dmitry Kudryavtsev

Luați în considerare utilizarea matricelor în loc de obiecte numerice.

Array-urile în json sunt definite folosind []http://www.json.org/

Iată un exemplu:

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

(Iertați-mă dacă am uitat fie să închid { sau [ sau , este destul de greu de scris codul în SO :p )

În acest fel, nici măcar nu este nevoie să aveți numere de genul

"products":2,

sau

"childrenimages":2

Pur și simplu faceți

foo.products.length

sau

foo.products[0].childrenimages.length

Mult noroc 🙂

Comentarii

  • Aceasta este, de fapt, o sugestie sănătoasă, deoarece utilizarea indicilor numerici ca nume de proprietăți de obiect nu are sens. –  > Por Andy E.
Tallboy

Iată formatul corect pentru datele dvs. (rețineți că am schimbat unele date în sine)

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

jeschafe

Nu este de fapt o matrice ceea ce ai acolo, ci doar un obiect care conține proprietăți care sunt, de asemenea, obiecte. De asemenea, îți lipsesc câteva virgule, așa că nici măcar nu se va compila.

Ceea ce ar putea fi mai convenabil pentru tine în acest caz este să folosești atât array-uri, cât și obiecte pentru a forma JSON-ul tău. De exemplu:

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

Florian Margaine

Nu scrieți JSON. Serios, cu excepția unor fișiere de configurare simple, nu scrieți JSON.

Aveți utilități pentru a converti obiectele într-un șir JSON în majoritatea limbajelor (dacă nu în niciunul).

PHP: json_encode($array);

Javascript: JSON.stringify( obj );

Etc.

Scrierea manuală a JSON duce adesea la erori de sintaxă. De genul celor care îți dau bătăi de cap până când vezi virgula lipsă sau w/e. Aveți instrumente bune pentru a face acest lucru, folosiți-le. Ai putea compara cu XML, dar JSON nu are niciun instrument (IDE, editor de text) care să spună „Această sintaxă este greșită” în timp ce o scrii. De exemplu, niciun editor nu vă va spune că ați folosit un ghilimele simplu în loc de dublu.

Pur și simplu nu scrieți JSON.

Comentarii

  • Care sunt declarațiile dumneavoastră împotriva scrierii JSON? Nu văd niciun sens în răspunsul dumneavoastră. –  > Por Dmitry Kudryavtsev.
  • Pentru că scrierea manuală a JSON duce adesea la erori care nu s-ar întâmpla dacă ați folosi metodele furnizate de majoritatea limbajelor. De ce să riscați acest tip de erori când le puteți evita? –  > Por Florian Margaine.
  • @skwee ești sigur ? el îți sugerează să creezi un obiect nativ în limbaj și apoi să stringi json din el 😛 deci ceea ce faci tu este de fapt să scrii JSON în MODUL ÎN CARE NU SE FĂRĂ EROARE ȘI ERORI –  > Por ShrekOverflow.
  • Este același argument conform căruia XML nu a fost niciodată menit să fie scris de mână. Dacă ai cunoaște limbajele potrivite ai putea scrie o bază de date de mână, dar ar fi absurd. Același lucru cu JSON. –  > Por James P. Wright.
  • @JamesP.Wright, cu excepția faptului că JSON nu dispune de aceleași instrumente pentru a scrie fără erori de sintaxă (IDE-uri, orice). De exemplu, dacă folosești ghilimele simple în loc de ghilimele duble, nu-ți va spune nicăieri „este greșit”. –  > Por Florian Margaine.

Tags:,