将伪Json字符串转换为Python对象

时间:2013-11-01 10:58:48

标签: python json encoding decoding

我有一个看起来像JSON的字符串,但事实并非如此。我想将它转换为Python对象(来回)。

格式如下:

v = "{ TestKey = true,
Calibration = 0,
Blacks = 0,
Brightness = 50,
BasicSetting = { 0,
0,
32,
22},
Whites = 0 }"

我不能直接在这样的字符串上使用json.load(v)。 将它转换为Python对象的最佳/最简单方法是什么? 编写自定义Python JSON编码器/解码器? 我需要将Python解码回原始的字符串格式。

到目前为止,我正在替换= by:但我面临一些问题,要正确地将'放在原始字符串中,我认为这不是最好的方法。还有其他建议吗?

感谢。

1 个答案:

答案 0 :(得分:1)

这很丑,因为地狱和一些正则表达的忍者能够使用一半的符号实现这一点,但似乎有效:

import json
import re

def parse(v):
    # Remove newlines and replace "=" with ":"
    v1 =  v.replace('=', ':').replace("\n", "")
    # Enclose strings in double quotes
    v2 = re.sub(r'(\d*[a-zA-Z][a-zA-Z0-9]*)', r'"\g<1>"', v1)
    # If you want booleans
    v3 = re.sub(r'"(true|false)"', r'\g<1>', v2)
    # Create lists
    return json.loads(re.sub(r"{([^:]+)}", r'[\g<1>]', v3))