2014-12-05 3 views
0

다양한 스레드를 통과했지만 특정 대답을 파이썬에서 찾을 수 없습니다. 는 내가 JSON 파일 I가 배열 형태로 JSON 객체 '제품'을 변경하여, 아래의 형식으로이 JSON 파일을 변환해야JSONObject를 Python을 사용하여 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" 
      } 
    } 
} 

있습니다.

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

파이썬으로 만드는 좋은 방법이 있습니까? 대부분 사람들이 자바를 사용하고 있지만 파이썬에서는 사용하지 않는 것을 보았습니다. 파이썬으로 할 수있는 방법을 알려주시겠습니까?

답변

1

와 JSON을 돌려 줄 수 있으며, 그것은 당신에게 값의 배열을 제공 할 것입니다. 아래 코드는 또한 주목은 File2.txt에 나를 당신의 JSON 가정에서 작동

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를 k, v는 정렬 (d [ "data"] [ "응답"] [ "products"]. items())]'). 하지만 그렇지 않으면, 네, 이것이 전부입니다. – abarnert

+0

감사합니다. 이것은 나를 위해 완벽하게 작동합니다. 내가 신뢰하지 않기 때문에 투표를 할 수 없었습니다. – user2129946

+0

@ user2129946, 감사합니다. 당신은 대답으로 그것을 선택할 수 있어야하며 그것은 당신의 신뢰 수준 (투표)까지 추가 할 것입니다. – user3885927

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.dumps(b)

+0

왜 당신은'deepcopy' 추가 한? 그리고 왜't.values ​​()'가 이미하는 일을하기 위해 listcomp을 사용합니까? (또는 3.x의'list (t.values ​​())') – abarnert

+0

@abarnert 딥 카피를 예방책으로 사용 했으므로 OP는 사용하지 않아도됩니다. 목록 작성자가 잘못되었습니다. 방금 t.values ​​()를 완료해야합니다 –

+0

무엇에 대한 예방책으로? 그가 명백하게 사용하지 않는 임시 객체를 수정하지 않으려면? 또는'b' 또는 뭔가를 변경하면서 (일부분)'a'를 반복 할 계획입니까? (경우에 따라 필요할 수도 있습니다)? – abarnert

관련 문제