rae*_*aeX 63 python parsing json
我一直在试图找出一种在Python中加载JSON对象的好方法.我发送这个json数据:
{'http://example.org/about': {'http://purl.org/dc/terms/title': [{'type': 'literal', 'value': "Anna's Homepage"}]}}
Run Code Online (Sandbox Code Playgroud)
到后端它将作为字符串接收,然后我用来json.loads(data)解析它.
但每次我得到同样的例外:
ValueError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)
Run Code Online (Sandbox Code Playgroud)
我用谷歌搜索它,但除了这个解决方案似乎没有什么工作,这个解决方案json.loads(json.dumps(data))对我来说并不那么有效,因为它接受任何类型的数据,即使是那些不是json格式的数据.
任何建议将不胜感激.
Elm*_*lmo 105
这个:
{'http://example.org/about': {'http://purl.org/dc/terms/title': [{'type': 'literal', 'value': "Anna's Homepage"}]}}
Run Code Online (Sandbox Code Playgroud)
不是JSON.
这个:
{"http://example.org/about": {"http://purl.org/dc/terms/title": [{"type": "literal", "value": "Anna's Homepage"}]}}
Run Code Online (Sandbox Code Playgroud)
是JSON.
eli*_*lig 27
因为JSON只允许用双引号括起字符串,所以你可以像这样操作字符串:
str
这将在JSON字符串中用双引号替换所有出现的单引号js-beautify.
您也可以使用str不太严格的:
js-beautify
小智 19
import ast
inpt = {'http://example.org/about': {'http://purl.org/dc/terms/title':
[{'type': 'literal', 'value': "Anna's Homepage"}]}}
json_data = ast.literal_eval(json.dumps(inpt))
print(json_data)
Run Code Online (Sandbox Code Playgroud)
这将解决问题。
如果你想将带有单引号的 json 字符串转换为 python dict 使用ast.literaleval()
>>> import ast
>>> payload = "{'hello': 'world'}"
>>> ast.literal_eval(payload)
{'hello': 'world'}
>>> type(ast.literal_eval(payload))
<class 'dict'>
Run Code Online (Sandbox Code Playgroud)
这会将有效负载转换为 python 字典。
您可以简单地使用 python eval 函数。
parsed_json = eval(your_json)
Run Code Online (Sandbox Code Playgroud)
我检查了你的 JSON 数据
{'http://example.org/about': {'http://purl.org/dc/terms/title': [{'type': 'literal', 'value': "Anna's Homepage"}]}}
Run Code Online (Sandbox Code Playgroud)
在http://jsonlint.com/ 中,结果是:
Error: Parse error on line 1:
{ 'http://example.org/
--^
Expecting 'STRING', '}', got 'undefined'
Run Code Online (Sandbox Code Playgroud)
将其修改为以下字符串可解决 JSON 错误:
{
"http://example.org/about": {
"http://purl.org/dc/terms/title": [{
"type": "literal",
"value": "Anna's Homepage"
}]
}
}
Run Code Online (Sandbox Code Playgroud)
JSON字符串必须使用双引号.JSON python库强制执行此操作,因此您无法加载字符串.您的数据需要如下所示:
{"http://example.org/about": {"http://purl.org/dc/terms/title": [{"type": "literal", "value": "Anna's Homepage"}]}}
Run Code Online (Sandbox Code Playgroud)
如果这不是你可以做的事情,你可以用ast.literal_eval()而不是json.loads()
就我而言,双引号不是问题。
上一个逗号给了我同样的错误信息。
{'a':{'b':c,}}
^
Run Code Online (Sandbox Code Playgroud)
为了删除该逗号,我编写了一些简单的代码。
import json
with open('a.json','r') as f:
s = f.read()
s = s.replace('\t','')
s = s.replace('\n','')
s = s.replace(',}','}')
s = s.replace(',]',']')
data = json.loads(s)
Run Code Online (Sandbox Code Playgroud)
这对我有用。
您可以使用json5包https://pypi.org/project/json5/而不是jsonpackage.json。这个包可以处理单引号。解码功能json5.loads(data)与json封装类似。
x = x.replace("'", '"')
j = json.loads(x)
Run Code Online (Sandbox Code Playgroud)
虽然这是正确的解决方案,但是如果有这样的 JSON 可能会导致相当头痛 -
{'status': 'success', 'data': {'equity': {'enabled': True, 'net': 66706.14510000008, 'available': {'adhoc_margin': 0, 'cash': 1277252.56, 'opening_balance': 1277252.56, 'live_balance': 66706.14510000008, 'collateral': 249823.93, 'intraday_payin': 15000}, 'utilised': {'debits': 1475370.3449, 'exposure': 607729.3129, 'm2m_realised': 0, 'm2m_unrealised': -9033, 'option_premium': 0, 'payout': 0, 'span': 858608.032, 'holding_sales': 0, 'turnover': 0, 'liquid_collateral': 0, 'stock_collateral': 249823.93}}, 'commodity': {'enabled': True, 'net': 0, 'available': {'adhoc_margin': 0, 'cash': 0, 'opening_balance': 0, 'live_balance': 0, 'collateral': 0, 'intraday_payin': 0}, 'utilised': {'debits': 0, 'exposure': 0, 'm2m_realised': 0, 'm2m_unrealised': 0, 'option_premium': 0, 'payout': 0, 'span': 0, 'holding_sales': 0, 'turnover': 0, 'liquid_collateral': 0, 'stock_collateral': 0}}}}
Run Code Online (Sandbox Code Playgroud)
注意到“True”值了吗?使用它可以对布尔值进行双重检查。这将涵盖这些情况 -
x = x.replace("'", '"').replace("True", '"True"').replace("False", '"False"').replace("null", '"null"')
j = json.loads(x)
Run Code Online (Sandbox Code Playgroud)
另外,请确保您不会
x = json.loads(x)
Run Code Online (Sandbox Code Playgroud)
它必须是另一个变量。
| 归档时间: |
|
| 查看次数: |
124305 次 |
| 最近记录: |