2014-12-05 111 views
0

我已经通过各种线程,但无法找到python中的特定答案。 我有一个JSON文件使用Python将JSONObject转换为JSONArray

{ 
    "StoreID" : "123", 
    "Status" : 3, 
    "data" : { 
      "Response" : { 
        "section" : "25", 
        "elapsed" : 277.141, 
        "products" : { 
          "prd_1": { 
            "price" : 11.99, 
            "qty" : 10, 
            "upc" : "0787493" 
          }, 
          "prd_2": { 
            "price" : 9.99, 
            "qty" : 2, 
            "upc" : "0763776" 
          }, 
          "prd_3": { 
            "price" : 29.99, 
            "qty" : 8, 
            "upc" : "9948755" 
          } 
        }, 
        "type" : "Tagged" 
      } 
    } 
} 

我需要此JSON文件转换成下面的格式,通过改变JSON对象“产品”成阵列形式。

{ 
    "StoreID" : "123", 
    "Status" : 3, 
    "data" : { 
      "Response" : { 
        "section" : "25", 
        "elapsed" : 277.141, 
        "products" : [ 
          { 
            "price" : 11.99, 
            "qty" : 10, 
            "upc" : "0787493" 
          }, 
          { 
            "price" : 9.99, 
            "qty" : 2, 
            "upc" : "0763776" 
          }, 
          { 
            "price" : 29.99, 
            "qty" : 8, 
            "upc" : "9948755" 
          } 
        ], 
        "type" : "Tagged" 
      } 
    } 
} 

有没有什么好的方法来做到这一点在Python中。大多数情况下,我看到人们使用Java,但不是在Python中。你可以让我知道一种方法来做到这一点在python中。

回答

1

刚刚得到的值(),这将让你值的数组。下面的代码从我这里假设你的JSON的工作原理是在FILE1.TXT还要注意

import json 
with open('file1.txt') as jdata: 
    data = json.load(jdata) 
    d = data 
d["data"]["Response"]["products"] = d["data"]["Response"]["products"].values() 
print(json.dumps(d)) 

输出:

{"Status": 3, "StoreID": "123", "data": {"type": "Tagged", "Response": {"section": "25", "products": [{"price": 9.99, "upc": "0763776", "qty": 2}, {"price": 29.99, "upc": "9948755", "qty": 8}, {"price": 11.99, "upc": "0787493", "qty": 10}], "elapsed": "277.141"}}} 
+0

他可能想按键排序输出(例如'[v for k,v in sort(d [“data”] [“Response”] [“products”]。items())]')。但除此之外,是的,这就是它的全部。 – abarnert 2014-12-06 00:19:48

+0

谢谢。这对我来说是完美的。无法投票,因为我没有信誉。 – user2129946 2014-12-06 05:23:53

+0

@ user2129946,谢谢。您应该能够选择它作为答案,并且这也会增加您的信任级别(投票)。 – user3885927 2014-12-06 14:20:16

0

会是这样的工作吗?

import json 
import copy 

a = json.load(open("your_data.json", "r")) 

b = copy.deepcopy(a) 

t = a.get('data').get('Response').get('products') 
b['data']['Response']['products'] = t.values() # Originally was: [t[i] for i in t] 

可以产品词典的回馈与JSON json.dumps(b)

+0

你为什么加入'deepcopy'?为什么使用listcomp来做't.values()'已经做了什么? (或3.x中的'list(t.values())') – abarnert 2014-12-06 00:20:35

+0

@abarnert我使用deepcopy作为预防措施,OP是免费的不使用它。清单比较差,应该刚刚完成t.values() – 2014-12-06 00:22:29

+0

作为预防措施,对什么?为了避免修改他没有明显用途的临时对象?或者你计划在改变'b'或其他什么时(在这种情况下可能有必要)迭代(部分)'a'? – abarnert 2014-12-06 01:07:09