2016-10-25 1 views
1

Ich habe ein paar Variablen, die ich als json des Formats entleeren müssen:Bildung eines JSON-Arrays mit Objekten mit einem Python-Objekt

{ 
    "elements":[ 
     { 
      "key":"foo", 
      "value":"7837" 
     }, 
     { 
      "key":"bar", 
      "value":"3423" 
     } 
    ] 
} 

Ich versuche, das richtige Objekt, um herauszufinden, was das geben würde, über Struktur auf usin json.dumps(). Ich sehe, dass in Python Listen ein JSON-Array geben, wo Wörterbücher ein JSON-Objekt geben, während JSON-Dumps verwendet werden.

Ich versuche, so etwas wie:

x={} 
x["elements"]={} 
x["elements"]["key"]="foo" 
x["elements"]["value"]="7837" 
x["elements"]["key"]="bar" 
x["elements"]["value"]="3423" 
json_x=json.dumps(x) 

Aber das gibt mir noch:

{"elements": {"key": "bar", "value": "3423"}} 

, die offensichtlich falsch ist.

Wie kann ich das richtige Wörterbuch und Listenstruktur integrieren, um zu den oben genannten JSON zu gelangen?

+0

Warum verwenden Sie nicht einfach 'x = {" elements ": [{" key ":" foo "," value ":" 7837 "}, {" key ":" bar "," value ": "3423"}]} '? – falsetru

+0

Das ist tatsächlich verwendbar. Ich versuche nur, die Python-Objekt/JSON-Struktur besser zu verstehen. Aber was du gesagt hast, funktioniert! – rgamber

+1

Der 'elements' Schlüssel hat ein anderes Array (Python-Liste) als Wert, kein anderes Objekt. Das war dein Fehler. –

Antwort

1

Warum verwenden Sie nicht einfach Literal?

x = { 
    "elements": [ 
     {"key":"foo", "value":"7837"}, 
     {"key":"bar", "value":"3423"} 
    ] 
} 

Code zu beheben, müssen Sie wörtliche ([]) eine Liste verwenden, wenn zu elements Wörterbuch-Eintrag zuweisen:

>>> x = {} 
>>> x["elements"] = [] # <--- 
>>> x["elements"].append({}) 
>>> x["elements"].append({}) 
>>> x["elements"][0]["key"]="foo" 
>>> x["elements"][0]["value"]="7837" 
>>> x["elements"][1]["key"]="bar" 
>>> x["elements"][1]["value"]="3423" 
>>> json.dumps(x) 
'{"elements": [{"value": "7837", "key": "foo"}, {"value": "3423", "key": "bar"}]}' 

Aber es ist schwer zu lesbar ist, aufrechtzuerhalten.

Verwandte Themen