Java 使用Python将JSONObject转换为JSONArray
我浏览了各种线程,但在python中找不到具体的答案。 我有一个json文件Java 使用Python将JSONObject转换为JSONArray,java,python,json,Java,Python,Json,我浏览了各种线程,但在python中找不到具体的答案。 我有一个json文件 { "StoreID" : "123", "Status" : 3, "data" : { "Response" : { "section" : "25", "elapsed" : 277.141, "products" : {
{
"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对象“products”更改为数组形式,将此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做这件事的方法吗。你想做点什么吗
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)只需获取products dictionary的values(),这将为您提供一个值数组。假设您的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"}}}
他可能希望按键对输出进行排序(例如,
[v表示k,v表示已排序(d[“数据”][“响应”][“产品”].items())]
)。但除此之外,是的,这就是全部。谢谢。这对我来说非常有效。无法投票,因为我没有可信度。@user2129946,谢谢。您应该能够选择它作为答案,这也将增加您的信任级别(投票)。为什么要添加deepcopy
?为什么要使用listcomp来做t.values()
已经做过的事情呢?(或list(t.values())
in 3.x.)@abarnert我使用deepcopy只是为了预防,OP可以不使用它。列表comp不好,应该做t.values()来预防什么?为了避免修改他没有明显用途的临时对象?或者,您是否计划在更改b
或其他内容(在这种情况下可能需要)时迭代(部分)a
?