我有一些配置文件,无法更改数据格式。
其中一个看起来像这样:
root {
configuration {
field_a: "aaaa"
field_b: "bbbb"
}
child {
configuration {
field_a: "aaa1"
field_b: "bbb1"
}
}
child {
configuration {
field_a: "aaa2"
field_b: "bbb2"
}
}
}
我需要的是解析文件并将其保存为JSON对象:
{root:
{field_a:"aaaa",field_b:"bbbb"},
children: [{field_a:"aaa", field_b:"bbb"}, ... ]
}
有没有办法让它成为可能?
答案 0 :(得分:1)
您的数据格式是非官方的-javascript-array。对于伟大的python,可以很容易地将它们解析为4行代码中的python dict。然后使用simplejson解析为您喜欢的任何json格式。
s = '''
root {
configuration {
field_a: "aaaa"
field_b: "bbbb"
}
child {
configuration {
field_a: "aaa"
field_b: "bbb"
}
}
}
'''
s = s.replace("{", ":{").replace("}", "},")
s = "{%s}"%s
import re
s = re.sub(r'(\w+)"', r'\1",', s)
s = re.sub(r"(\w+)\s*\:", r'"\1":', s)
print "string:", s
d = eval(s)
print "python dict:", d
import simplejson as json
print "json:", json.dumps(d)
答案 1 :(得分:1)
快速思考:
如果配置缩进并以示例结尾:
将“{”和“}”替换成如下:
root:
configuration:
field_a: "aaaa"
field_b: "bbbb"
child:
configuration:
field_a: "aaa"
field_b: "bbb"
现在它是一个yaml格式文件! 一定要从yaml变换为json!
import yaml
import json
s = "yamlstr" # your yaml str
data = yaml.load(s)
jsondata = json.dumps(data)
print jsondata
<强>更新强>
由于孩子是一个列表,而“root”,“配置”和“孩子”似乎都是关键字,所以请稍微更改一下并找到解决方法:
实现这一目标:
root:
- configuration:
field_a: "aaaa"
field_b: "bbbb"
- child:
- configuration:
field_a: "aaa1"
field_b: "bbb1"
- child:
- configuration:
field_a: "aaa2"
field_b: "bbb2"
并输出python dict:
{'root': [{'configuration': None, 'field_b': 'bbbb', 'field_a': 'aaaa'}, {'child': [{'configuration': {'field_b': 'bbb1', 'field_a': 'aaa1'}}]}, {'child': [{'configuration': {'field_b': 'bbb2', 'field_a': 'aaa2'}}]}]}
现在做一些简单的编程并将其作为你的结构: - )