我有一个txt文件,其格式如下所示,Key字符串不在引号中。如何使用python转换为JSON?
name {
first_name: "random"
}
addresses {
location {
locality: "India"
street_address: "xyz"
postal_code: "300092"
full_address: "street 1 , abc,India"
}
}
projects {
url: "www.githib.com"
}
答案 0 :(得分:0)
假设您的数据为,
{
'addresses': {
'location': {
'full_address': 'street 1 , abc,India',
'locality': 'India',
'postal_code': '300092',
'street_address': 'xyz'
}
},
'name': {
'first_name': 'random'
},
'projects': {
'url': 'www.githib.com'
}
}
使用json.dumps将dict转换为json
In [16]: import json
In [17]: data
Out[17]:
{'addresses': {'location': {'full_address': 'street 1 , abc,India',
'locality': 'India',
'postal_code': '300092',
'street_address': 'xyz'}},
'name': {'first_name': 'random'},
'projects': {'url': 'www.githib.com'}}
In [18]: json.dumps(data)
Out[18]: '{"name": {"first_name": "random"}, "projects": {"url": "www.githib.com"}, "addresses": {"location": {"postal_code": "300092", "full_address": "street 1 , abc,India", "street_address": "xyz", "locality": "India"}}}'
In [19]:
答案 1 :(得分:0)
标准库中没有简单的方法将该数据格式转换为JSON,因此我们需要编写一个解析器。但是,由于数据格式相当简单,因此并不难。我们可以使用标准csv
模块来读取数据。 csv.reader
将正确处理解析空格和引用字符串的细节。引用的字符串将被视为单个标记,可以引用由单个单词组成的标记,但它们不一定是。
csv.reader
通常从打开的文件中获取数据,但它非常通用,并且还会从字符串列表中读取数据。这在测试时很方便,因为我们可以将输入数据嵌入到脚本中。
我们将数据解析为嵌套字典。跟踪嵌套的一种简单方法是使用堆栈,我们可以使用普通列表作为堆栈。
下面的代码假定输入行可以是以下三种形式之一:
{
结束。}
import csv
import json
raw = '''\
name {
first_name: "random"
}
addresses {
location {
locality: "India"
street_address: "xyz"
postal_code: "300092"
full_address: "street 1 , abc,India"
}
}
projects {
url: "www.githib.com"
}
'''.splitlines()
# A stack to hold the parsed objects
stack = [{}]
reader = csv.reader(raw, delimiter=' ', skipinitialspace=True)
for row in reader:
#print(row)
key = row[0]
if key == '}':
# The end of the current object
stack.pop()
continue
val = row[-1]
if val == '{':
# A new subobject
stack[-1][key] = d = {}
stack.append(d)
else:
# A line of plain data
stack[-1][key] = val
# Convert to JSON
out = json.dumps(stack[0], indent=4)
print(out)
<强>输出强>
{
"name": {
"first_name:": "random"
},
"addresses": {
"location": {
"locality:": "India",
"street_address:": "xyz",
"postal_code:": "300092",
"full_address:": "street 1 , abc,India"
}
},
"projects": {
"url:": "www.githib.com"
}
}