将JSON值中的双引号转换为单引号?

时间:2017-07-31 22:44:31

标签: python json list replace double-quotes

我有一个json字符串列表,如下所示:

[
    {
    "info": "https://google.com/athens",
    "locationdetails": "Greece"
    ...
    },
    {
    "info": "italytourism.com",
    "locationdetails": "Gardens of "Little Italy" indoors"
    ...
    }
    ...
]

其中的一些json值在其中有双引号(例如" Little Italy,"并且因为在python中只创建了一个错误,因此只能在双引号内使用单引号(或者转义字符)。我想知道通过这个json字符串和键列表的最佳方法是什么,并将双引号INSIDE值字符串转换为单引号。有人建议使用json.dumps(jsonlist)来解决问题,但这对我不起作用。谢谢你的帮助!

2 个答案:

答案 0 :(得分:1)

如评论中所述,您的示例不是有效的JSON。使用json库,请注意引号已正确转义,并且数据可以从序列化到/从JSON格式进行往返。

import json

data = [
    {
    'info': 'https://google.com/athens',
    'locationdetails': 'Greece'
    },
    {
    'info': 'italytourism.com',
    'locationdetails': 'Gardens of "Little Italy" indoors'
    }
]

j = json.dumps(data,indent=2)
print(j)

data2 = json.loads(j)
print(data2 == data)
[
  {
    "info": "https://google.com/athens", 
    "locationdetails": "Greece"
  }, 
  {
    "info": "italytourism.com", 
    "locationdetails": "Gardens of \"Little Italy\" indoors"
  }
]
True

答案 1 :(得分:1)

这个RegEx在给出的有限示例中修复了你的坏json,但我不希望它对所有可能的例子都很健壮。例如,它假设您的值中只包含字母数字字符和空格,除了有问题的双引号字符。

import re
import json

jsonString = """
[
    {
    "info": "https://google.com/athens",
    "locationdetails": "Greece"

    },
    {
    "info": "italytourism.com",
    "locationdetails": "Gardens of "Little Italy" indoors"
    }
]
"""
data = json.loads(re.sub(r'": "([\s\w]*)"([\s\w]+)"([\s\w]*)"(,?)', r'": "\1' + "'" + r'\2' + "'" + r'\3"\4', jsonString))