如何将无效的json转换为val;python中的id-json

如何将无效的json转换为val;python中的id-json,python,Python,我的json字符串: "{'Link': 'media/pdf/details/all-india-govt-jobs/other-all-india-govt-jobs/5472540504.pdf', 'Title': 'Corrigendum'}, {'Link': 'media/pdf/details/all-india-govt-jobs/other-all-india-govt-jobs/3901883467.pdf', 'Title': 'Notification '}, {'Li

我的json字符串:

"{'Link': 'media/pdf/details/all-india-govt-jobs/other-all-india-govt-jobs/5472540504.pdf', 'Title': 'Corrigendum'},
{'Link': 'media/pdf/details/all-india-govt-jobs/other-all-india-govt-jobs/3901883467.pdf', 'Title': 'Notification '},
{'Link': 'http://www.nbagr.res.in/', 'Title': ' Official Website'}"
预期口述:

[
  {'Link': 'media/pdf/details/all-india-govt-jobs/other-all-india-govt-jobs/5472540504.pdf', 'Title': 'Corrigendum'},
  {'Link': 'media/pdf/details/all-india-govt-jobs/other-all-india-govt-jobs/3901883467.pdf', 'Title': 'Notification '},
  {'Link': 'http://www.nbagr.res.in/', 'Title': ' Official Website'}
]

如何将第一个无效字典转换为第二个有效字典。

是的,它不是有效的JSON,但是如果用括号括起来,可以将字符串传递给:

>>> s="""{'Link': 'media/pdf/details/all-india-govt-jobs/other-all-india-govt-jobs/5472540504.pdf', 'Title': 'Corrigendum'},
... {'Link': 'media/pdf/details/all-india-govt-jobs/other-all-india-govt-jobs/3901883467.pdf', 'Title': 'Notification '},
... {'Link': 'http://www.nbagr.res.in/', 'Title': ' Official Website'}"""
>>> import ast
>>> ast.literal_eval("[" + s + "]")
[{'Link': 'media/pdf/details/all-india-govt-jobs/other-all-india-govt-jobs/5472540504.pdf', 'Title': 'Corrigendum'}, 
 {'Link': 'media/pdf/details/all-india-govt-jobs/other-all-india-govt-jobs/3901883467.pdf', 'Title': 'Notification '}, 
 {'Link': 'http://www.nbagr.res.in/', 'Title': ' Official Website'}]

您正在处理一个格式不正确的JSON文件:JSON使用双引号(“)而不是单引号(”)。您的JSON字符串似乎无法确定它是行JSON(但带有尾随逗号)还是普通JSON(但没有带换行符的[])。我强烈建议您修复输入

也就是说,这段代码应该从字符串中加载对象:

import json
docs = [ json.loads(line.strip(",")) for line in json_string.replace("'", '"').split("\n") ]
请记住,这是专门为您的输入量身定制的。如果您的输入包含转义换行符、转义引号字符或类似内容,它将中断

这就是为什么最好将输入固定为propertyJSON

docs = json.loads(json_string)  # for '[{"Link":"http://foo.com","Title":"foo"}]'


它更稳定,更易于维护。

如果“我们可以用”而不是“我们可以用”的话,为什么要用“”?因为字符串中有换行符,所以需要
“”“
,否则是语法错误。还是我误解了你的问题,你的字符串实际上包含了这些引号?在这种情况下,请提供一个,这样我们就可以准确地重现您的问题。如何将单个“字符串”转换为“”??意思是假设字符串为“hello”如何将其设置为“hello”,我建议您改为修复输入。(不过,使用AST非常聪明。)如何将单个“字符串”转换为“”??意思是假设字符串为“hello”如何使其为“hello”-否则它将破坏line@SoubhagyaPradhan您从哪里获得输入json字符串?从我的database@SoubhagyaPradhan在TEXT或VARCHAR列中?他们是如何写入数据库的?你有没有可能解决这个问题?
docs = [ json.loads(line) for line in json_string.split("\n") ]  # for linewise JSON