Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 迭代JSON&;附加到字典上?_Python_Dictionary_For Loop - Fatal编程技术网

Python 迭代JSON&;附加到字典上?

Python 迭代JSON&;附加到字典上?,python,dictionary,for-loop,Python,Dictionary,For Loop,我已经搜索过了,但似乎找不到一个具体的例子来说明我在这里要做的事情。 我正在使用一个api,它返回一堆json行。我希望遍历所有的键/值对,并只将相关的键/值对存储到另一个字典中,以便稍后使用/引用 我所尝试的大部分工作正常,但是当我打印dictionary对象的内容时,它只返回最新的键/值对。。。我想知道如何附加到字典中,这样当我打印它时,我会得到一个很长的键/值对列表 代码如下: r=requests.get(url + id, headers=h, params=p) inbound_di

我已经搜索过了,但似乎找不到一个具体的例子来说明我在这里要做的事情。 我正在使用一个api,它返回一堆json行。我希望遍历所有的键/值对,并只将相关的键/值对存储到另一个字典中,以便稍后使用/引用

我所尝试的大部分工作正常,但是当我打印dictionary对象的内容时,它只返回最新的键/值对。。。我想知道如何附加到字典中,这样当我打印它时,我会得到一个很长的键/值对列表

代码如下:

r=requests.get(url + id, headers=h, params=p)
inbound_dict={}
inbound=json.loads(r.text)
for item in inbound['messages']:
    inbound_dict[item['conversationId']] = item['body']
print(inbound_dict)
我知道一定是我错过了一些简单的东西。我试过
入站\u dict.append()
,但显然不太正确

您可以在下图中看到红线的位置,它只显示了每个不同的json“实例”的结束位置。对于上下文,这是一个sms消息传递应用程序,每个json响应代表一条消息

以下是文本形式的前两个“json”:

b'{"id":1005672,"messages":[{"id":4461048,"body":"Mnow test test","conversationId":1005672,"locationId":2045,"contactId":12792806,"assignedUserId":0,"status":"RECEIVED","error":null,"kind":"INCOMING","outgoing":false,"reviewRequest":false,"type":"SMS","readDate":0,"respondedDate":0,"sentDate":1576783232355,"attachments":[]},{"id":4461049,"body":"THIS NUMBER DOES NOT CURRENTLY ACCEPT TEXT MESSAGES PLEASE CALL (716) 444-4444 TO WORK WITH ONE OF OUR INTAKE SPECIALISTS","conversationId":1005672,"locationId":2045,"contactId":12792806,"assignedUserId":0,"status":"RECEIVED","error":null,"kind":"AUTO_RESPONSE","outgoing":true,"reviewRequest":false,"type":"SMS","readDate":0,"respondedDate":0,"sentDate":1576783233546,"attachments":[]},{"id":4620511,"body":"test sms,test sms","conversationId":1005672,"locationId":2045,"contactId":12792806,"assignedUserId":17297,"status":"DELIVERED","error":null,"kind":"API","outgoing":true,"reviewRequest":false,"type":"SMS","readDate":0,"respondedDate":0,"sentDate":1577987093930,"attachments":[]},...

我想你想做:

r=requests.get(url + id, headers=h, params=p)
inbound_dict = {}
inbound=json.loads(r.text)
for item in inbound['messages']:
    inbound_dict[item['id']] = item['body']
print(inbound_dict)
鉴于这些数据:

'{"id": 1005672, "messages": [{"id": 4461048, "body": "Mnow test test", "conversationId": 1005672, "locationId": 2045, "contactId": 12792806, "assignedUserId": 0, "status": "RECEIVED", "error": "", "kind": "INCOMING", "outgoing": false, "reviewRequest": false, "type": "SMS", "readDate": 0, "respondedDate": 0, "sentDate": 1576783232355, "attachments": []}, {"id": 4461049, "body": "THIS NUMBER DOES NOT CURRENTLY ACCEPT TEXT MESSAGES PLEASE CALL (716) 444-4444 TO WORK WITH ONE OF OUR INTAKE SPECIALISTS", "conversationId": 1005672, "locationId": 2045, "contactId": 12792806, "assignedUserId": 0, "status": "RECEIVED", "error": "", "kind": "AUTO_RESPONSE", "outgoing": true, "reviewRequest": false, "type": "SMS", "readDate": 0, "respondedDate": 0, "sentDate": 1576783233546, "attachments": []}, {"id": 4620511, "body": "test sms,test sms", "conversationId": 1005672, "locationId": 2045, "contactId": 12792806, "assignedUserId": 17297, "status": "DELIVERED", "error": "", "kind": "API", "outgoing": true, "reviewRequest": false, "type": "SMS", "readDate": 0, "respondedDate": 0, "sentDate": 1577987093930, "attachments": []}]}'
输出为:

{    
    4461048: 'Mnow test test', 
    4461049: 'THIS NUMBER DOES NOT CURRENTLY ACCEPT TEXT MESSAGES PLEASE CALL (716) 444-4444 TO WORK WITH ONE OF OUR INTAKE SPECIALISTS', 
    4620511: 'test sms,test sms'
}

类似的方法可能会奏效:

# initialize variables:
inbound_dictionary_list = []

for item in inbound['messages']:

    # extract key, value:
    key = item['conversationId']
    value = item['body']

    # pack into dictionary object:
    parsed_item = {key:value}

    # update existing dictionary:
    inbound_dictionary_list.append(parsed_item)

细节:

我想你不明白。。。我不知道我想用什么来更新,因为我正试图通过json迭代来添加for循环。。。有数百行需要添加。我很抱歉-我已经更新了我的答案以适合您的上下文。如果我仍然误解了,请告诉我。我认为这更接近,但是当我打印入站dict对象的结果时,我仍然只得到1个键:值对。。。最新的。。。实际上,初始请求-响应中可能包含30个键。听起来所有键都是相同的,这意味着for循环的每次迭代都会覆盖键、值对。相反,您可以尝试创建一个字典列表-我已经编辑了代码以反映这一点。现在应该在那里-如果不起作用,请告诉我。这取决于您的数据。你应该打印(项目['conversationId'])来显示你正在创建的键。你能在这里粘贴实际文本而不是图片吗?它更容易阅读和操作。我用文本版本更新了帖子。我不确定你所说的无效json是否正确。。。使用json包对其进行操作是可行的,因此。。不确定。谢谢你提供的信息——我想你很接近了,但还是不太接近。根据我在原始帖子中发布的内容,返回:{198273:'这是我的消息'},这很好,正是我想要的。。。但是我想要一堆这些。。。就像一个充满小字典的字典,我可以稍后在程序中引用。不知道json响应的完整数据类型以及您希望输出的样子-我不认为我理解您想要什么,我将在原始帖子中添加json示例。。。我希望输出像这样:{28736:'你好…测试消息',837485:'你好,测试消息2',8436778:'再次你好!'}。。。就像字典中包含的键和值对列表一样。或者,如果有更好的方法来存储信息,以便我以后可以使用它?同样,这只是等式的一部分。我知道您想要的输出,但不知道输入。我用服务器的响应更新了问题