无法在Python中传递JSON

时间:2018-08-22 12:35:36

标签: python json response

我无法解析JSON。我的JSON代码段是从requests.post回复中返回的:-

{'result': {'parent': '', 'reason': '', 'made_sla': 'true', 'backout_plan': '', 'watch_list': '', 'upon_reject': 'cancel', 'sys_updated_on': '2018-08-22 11:16:09', 'type': 'Comprehensive', 'conflict_status': 'Not Run', 'approval_history': '', 'number': 'CHG0030006', 'test_plan': '', 'cab_delegate': '', 'sys_updated_by': 'admin', 'opened_by': {'link': 'https://dev65345.service-now.com/api/now/table/sys_user/6816f79cc0a8016401c5a33be04be441', 'value': '6816f79cc0a8016401c5a33be04be441'}, 'user_input': '', 'requested_by_date': '', 'sys_created_on': '2018-08-22 11:16:09', 'sys_domain': {'link': 'https://dev65345.service-now.com/api/now/table/sys_user_group/global', 'value': 'global'}, 'state': '-5', 'sys_created_by': 'admin', 'knowledge': 'false', 'order': '', 'phase': 'requested', 'closed_at': '', 'cmdb_ci': '', 'delivery_plan': '', 'impact': '3', 'active': 'true', 'review_comments': '', 'work_notes_list': '', 'business_service': '', 'priority': '4', 'sys_domain_path': '/', 'time_worked': '', 'cab_recommendation': '', 'expected_start': '', 'production_system': 'false', 'opened_at': '2018-08-22 11:16:09', 'review_date': '', 'business_duration': '', 'group_list': '', 'requested_by': {'link': 'https://dev6345.service-now.com/api/now/table/sys_user/user1', 'value': 'user1'}, 'work_end': '', 'change_plan': '', 'phase_state': 'open', 'approval_set': '', 'cab_date': '', 'work_notes': '', 'implementation_plan': '', 'end_date': '', 'short_description': '', 'close_code': '', 'correlation_display': '', 'delivery_task': '', 'work_start': '', 'assignment_group': {'link': 'https://dev65345.service-now.com/api/now/table/sys_user_group/testgroup', 'value': 'testgroup'}, 'additional_assignee_list': '', 'outside_maintenance_schedule': 'false', 'description': '', 'on_hold_reason': '', 'calendar_duration': '', 'std_change_producer_version': '', 'close_notes': '', 'sys_class_name': 'change_request', 'closed_by': '', 'follow_up': '', 'sys_id': '436eda82db4023008e357a61399619ee', 'contact_type': '', 'cab_required': 'false', 'urgency': '3', 'scope': '3', 'company': '', 'justification': '', 'reassignment_count': '0', 'review_status': '', 'activity_due': '', 'assigned_to': '', 'start_date': '', 'comments': '', 'approval': 'requested', 'sla_due': '', 'comments_and_work_notes': '', 'due_date': '', 'sys_mod_count': '0', 'on_hold': 'false', 'sys_tags': '', 'conflict_last_run': '', 'escalation': '0', 'upon_approval': 'proceed', 'correlation_id': '', 'location': '', 'risk': '3', 'category': 'Other', 'risk_impact_analysis': ''}}

我在网上搜索。它显示为单引号,而不是解析。

所以我试图将单引号转换为双引号。

with open ('output.json','r') as handle:
  handle=open('output.json')
str="123"
str=handle.stringify() #also with .str()
str = str.replace("\'", "\"")
jsonobj=json.load(json.dumps(handle))

但是它向我显示了No attribute stringify or str,因为它是json对象,并且它们是字符串对象函数。因此,能否请您帮我解析文件中带有单引号的json对象的正确方法。

代码:-

import requests
import json
from pprint import pprint

print("hello world")

url="********"

user="****"
password="*****"
headers={"Content-Type":"application/xml","Accept":"application/json"}

#response=requests.get(url,auth=(user,password),headers=headers)
response = requests.post(url, auth=(user, password), headers=headers ,data="******in xml****")

print(response.status_code)
print(response.json())

jsonobj=json.load(json.dumps(response.json()))
pprint(jsonobj)

2 个答案:

答案 0 :(得分:7)

您从requests.post收到的不是JSON,而是字典。

可以通过json.dumps(result)在JSON中编码的一个。

JSON是表示 对象的文本格式(“ ON”表示“对象符号”)。您可以将字典(或列表或标量)转换为JSON编码的字符串,或者反过来。

requests.post所做的就是获取JSON响应并已经对其进行了解析(使用json.loads),因此您根本不必考虑JSON。

答案 1 :(得分:3)

您还没有显示从帖子中获取数据的代码。但是,您几乎可以肯定正在执行以下操作:

response = requests.post('...')
data = response.json()

这里data已经 从JSON解析为Python dict;这就是请求json方法的作用。无需再次解析。

如果您需要原始JSON而不是Python数据,请不要调用json方法。直接从响应中获取数据:

data = response.content

现在data将是一个包含JSON的字符串。