【问题标题】:Convert string (without quotation marks) to JSON in Python在 Python 中将字符串(不带引号)转换为 JSON
【发布时间】:2017-10-27 13:31:25
【问题描述】:

我知道有一个方法 json.loads(string) 但只有当我将 String 格式化为 JSON 样式时它才会起作用。我拥有的字符串是这种形式:

{
data1: {
    x1: 'xyz'
},
data2 {
    y1: 'datadata'
 },
identify: {
    title: {
       text: 'Some important things'
     }
    }
}

有什么诀窍吗?

【问题讨论】:

  • 你得到的不是 JSON。它甚至不是 JSON。所以 json 库不会帮助你。如果是其他类型的标准格式,您也许可以找到一个工具,否则我认为您将不得不为自己编写一些自定义的东西。
  • @khelwood 我知道它不是 JSON,因为它没有引号,你不需要告诉我。这就是我问这个问题的原因!
  • 我很困惑。你想转换成或从json?您的标题说“to”,但您说您尝试过 loads,它转换 from json。
  • 你的输入数据里面有一个函数声明。如何将函数编码为 JSON?
  • 通过解析整个文本添加引号,然后...您可以使用正则表达式,或者您可以在文本中找到“:”并将引号添加到它们!

标签: python json


【解决方案1】:

我认为这个解决方案有多么笨拙,我怎么强调都不过分,但它确实有效。首先,我假设 OP 打错了字,意思是“data2**:**”,否则这个解决方案需要更加复杂。

首先,创建一个包含非常需要的引号的函数。

def fix_element(elem):
if elem[-1] == ':':
    return '"{}":'.format(elem[:-1])
else:
    return elem

其次,解析对象的文本,只使用双引号:

    text = """{
data1: {
    x1: 'xyz'
},
data2: {
    y1: 'datadata'
 },
identify: {
    title: {
       text: 'Some important things'
     }
    }
}""".replace("\'", '"')enter code here

然后更正文本的所有元素:

fixed_elem = [fix_element(elem) for elem in text.split()]
fixed_text = ''.join(fixed_elem)

可能基于正则表达式的解决方案会更简洁,但老实说,我没有时间或不想找到正确的表达式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-07-20
    • 2017-11-27
    • 2019-03-07
    • 2019-08-09
    • 2023-01-27
    • 2017-02-08
    • 1970-01-01
    • 2012-10-25
    相关资源
    最近更新 更多