[英]Python Json from Ordered Dict
我正在嘗試創建一個嵌套的 Json 結構,如下所示:
示例 Json:
{
"id" : "de",
"Key" : "1234567",
"from" : "test@test.com",
"expires" : "2018-04-25 18:45:48.3166159",
"command" : "method.exec",
"params" : {
"method" : "cmd",
"Key" : "default",
"params" : {
"command" : "testing 23"
}
}
我正在嘗試從 OrderedDict 執行此操作。 我不確定構建 OrderedDict 的正確方法,以便生成正確的 Json。
Python 代碼:
json_payload = OrderedDict(
[('id', id),
('Key', keystore),
('from', 'test@test.com'),
('expires', expires),
('command', 'method.exec')]
# What goes here for the params section??
)
print json.dumps(json_payload, indent=4, default=str)
您在JSON數據的末尾錯過了}
。
import json
import collections
data = {
"id" : "de",
"Key" : "1234567",
"from" : "test@test.com",
"expires" : "2018-04-25 18:45:48.3166159",
"command" : "method.exec",
"params" : {
"method" : "cmd",
"Key" : "default",
"params" : {
"command" : "testing 23"
}
}}
data_str = json.dumps(data)
result = json.loads(data_str, object_pairs_hook=collections.OrderedDict)
print(result)
輸出:
OrderedDict(
[
('id', 'de'),
('Key', '1234567'),
('from', 'test@test.com'),
('expires', '2018-04-25 18:45:48.3166159'),
('command', 'method.exec'),
('params',
OrderedDict(
[
('method', 'cmd'),
('Key', 'default'),
('params',
OrderedDict(
[
('command', 'testing 23')
]
)
)
]
)
)
]
)
一些東西。 id
是一個關鍵字。 您可以僅將字典作為參數傳遞。
ids = "de"
keystore = "1234567"
expires = "2018-04-25 18:45:48.3166159"
pdict = {
"method" : "cmd",
"Key" : "default",
"params" : {
"command" : "testing 23"
}
}
json_payload = OrderedDict(
[('id', id),
('Key', keystore),
('from', 'test@test.com'),
('expires', expires),
('command', 'method.exec'),
('params',pdict )
]
)
print(json.dumps(json_payload, indent=4, default=str))
使用@haifzhan的輸出作為輸入,可以准確地交付所需的內容。
payload = OrderedDict(
[
('id', 'de'),
('Key', '1234567'),
('from', 'test@test.com'),
('expires', '2018-04-25 18:45:48.3166159'),
('command', 'method.exec'),
('params',
OrderedDict(
[
('method', 'cmd'),
('Key', 'default'),
('params',
OrderedDict(
[
('command', 'testing 23')
]
)
)
]
)
)
]
)
print json.dumps(json_payload, indent=4, default=str)
在職的 !!!
大多數情況下,當我們序列化查詢集而不是 model 實例時,例如:
serialized_data = SnippetSerializer(MyModel.objects.all(), many=True)
Output:
[
OrderedDict([('code', 'ABC'), ('quantity', 5.0)]),
OrderedDict([('code', 'GGG'), ('quantity', 4.0)])
]
我們可以像這樣將其轉換為 json:-
from rest_framework.renderers import JSONRenderer
from rest_framework.parsers import JSONParser
import io
result = JSONRenderer().render(serialized_data)
output_stream = io.BytesIO(result)
data = JSONParser().parse(output_stream)
print(data)
Output:
[
{'code': 'ABC', 'quantity': 5.0},
{'code': 'GGG', 'quantity': 4.0}
]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.