如何使用 python 格式化我的 json
how to make my json formatted using python
我有 json 看起来像这样:
{
"message": ".replace(commentRegExp, '')",
"report_id": 1961272
}{
"message": ".replace(currDirRegExp, '')",
"report_id": 1961269
}{
"message": ".replace(jsSuffixRegExp, '');",
"report_id": 1961270
}
如何使用python使其成为正确的格式
我希望 json 数据看起来像这样:
[
{
"message": ".replace(commentRegExp, '')",
"report_id": 1961272
},
{
"message": ".replace(currDirRegExp, '')",
"report_id": 1961269
},
{
"message": ".replace(jsSuffixRegExp, '');",
"report_id": 1961270
}
]
这样的事情会分裂根元素
import json
import re
json = '{"message":".replace(commentRegExp, '')","report_id":1961272}{"message":".replace(currDirRegExp, '')","report_id":1961269}{"message":".replace(jsSuffixRegExp, '');","report_id":1961270}'
match_array = re.findall("[{].*?[}]", json)
json_new = ""
for x in match_array:
json_new+=(x+",")
json_new = "["+json_new[:-1]+"]"
编辑以从文件读取;
import json
import re
with open('test.json', 'r') as myfile:
data=re.sub(r"[\n\t\s]*", "", myfile.read())
match_array = re.findall("[{].*?[}]", data)
json_new = ""
for x in match_array:
json_new+=(x+",")
json_new = "["+json_new[:-1]+"]"
print(json_new)
这个解决方案的大部分工作是基于 [{].*?[}]
正则表达式,它将找到所有 json 根元素,然后用逗号分隔它们并在开始和结束时附加方括号
以下是读取 JSON 文本流的通用解决方案。它们不需要换行分隔。但是,假设 jq 在您的路径上。
为了便于说明,问题中显示的 JSON 个对象也假定位于名为 'json.txt'.
的文件中
import json
import sh
infile='json.txt'
cmd = sh.jq('-M', '-s', '.', infile)
obj = json.loads( cmd.stdout )
print( json.dumps(obj, indent=2) )
这会产生所需的输出。
(为了测试,您可以 运行: jq -s . infile
)
下面使用了"pip install jq"模块:https://pypi.org/project/jq/
import json
from jq import jq # jq(CMD).transform(DATA)
infile='json.txt'
def input(filename):
with open(filename, 'r') as f:
return f.read()
str = input( infile );
print( jq(".").transform(text=str, multiple_output=True))
输出
以上产生:
[{'message': ".replace(commentRegExp, '')", 'report_id': 1961272}, {'message': ".replace(currDirRegExp, '')", 'report_id': 1961269}, {'message': ".replace(jsSuffixRegExp, '');", 'report_id': 1961270}]
JSON输出
要产生 JSON 输出:
print(json.loads(json.dumps(jq(".").transform(text=str, multiple_output=True) )))
此 python3 脚本展示了如何读取文件中的 JSON 实体流,以及如何 "slurp" 将它们放入数组中,仅使用以下两个 headers:
import json
from splitstream import splitfile
infile='json.txt'
# Assuming filename contains a stream of JSON texts,
# this function returns each as a Python string
# that can be read using json.loads(_)
def stream(filename):
with open(filename, 'r') as f:
for s in splitfile(f, format="json"):
yield s
obj = []
for jstr in stream(infile):
obj += [ json.loads(jstr) ]
print( json.dumps( obj ) )
输出
[{"message": ".replace(commentRegExp, '')", "report_id": 1961272}, {"message": ".replace(currDirRegExp, '')", "report_id": 1961269}, {"message": ".replace(jsSuffixRegExp, '');", "report_id": 1961270}]
格式化输出
$ python3 slurpfile.py | jq .
[
{
"message": ".replace(commentRegExp, '')",
"report_id": 1961272
},
{
"message": ".replace(currDirRegExp, '')",
"report_id": 1961269
},
{
"message": ".replace(jsSuffixRegExp, '');",
"report_id": 1961270
}
]
我有 json 看起来像这样:
{
"message": ".replace(commentRegExp, '')",
"report_id": 1961272
}{
"message": ".replace(currDirRegExp, '')",
"report_id": 1961269
}{
"message": ".replace(jsSuffixRegExp, '');",
"report_id": 1961270
}
如何使用python使其成为正确的格式 我希望 json 数据看起来像这样:
[
{
"message": ".replace(commentRegExp, '')",
"report_id": 1961272
},
{
"message": ".replace(currDirRegExp, '')",
"report_id": 1961269
},
{
"message": ".replace(jsSuffixRegExp, '');",
"report_id": 1961270
}
]
这样的事情会分裂根元素
import json
import re
json = '{"message":".replace(commentRegExp, '')","report_id":1961272}{"message":".replace(currDirRegExp, '')","report_id":1961269}{"message":".replace(jsSuffixRegExp, '');","report_id":1961270}'
match_array = re.findall("[{].*?[}]", json)
json_new = ""
for x in match_array:
json_new+=(x+",")
json_new = "["+json_new[:-1]+"]"
编辑以从文件读取;
import json
import re
with open('test.json', 'r') as myfile:
data=re.sub(r"[\n\t\s]*", "", myfile.read())
match_array = re.findall("[{].*?[}]", data)
json_new = ""
for x in match_array:
json_new+=(x+",")
json_new = "["+json_new[:-1]+"]"
print(json_new)
这个解决方案的大部分工作是基于 [{].*?[}]
正则表达式,它将找到所有 json 根元素,然后用逗号分隔它们并在开始和结束时附加方括号
以下是读取 JSON 文本流的通用解决方案。它们不需要换行分隔。但是,假设 jq 在您的路径上。
为了便于说明,问题中显示的 JSON 个对象也假定位于名为 'json.txt'.
的文件中import json
import sh
infile='json.txt'
cmd = sh.jq('-M', '-s', '.', infile)
obj = json.loads( cmd.stdout )
print( json.dumps(obj, indent=2) )
这会产生所需的输出。
(为了测试,您可以 运行: jq -s . infile
)
下面使用了"pip install jq"模块:https://pypi.org/project/jq/
import json
from jq import jq # jq(CMD).transform(DATA)
infile='json.txt'
def input(filename):
with open(filename, 'r') as f:
return f.read()
str = input( infile );
print( jq(".").transform(text=str, multiple_output=True))
输出
以上产生:
[{'message': ".replace(commentRegExp, '')", 'report_id': 1961272}, {'message': ".replace(currDirRegExp, '')", 'report_id': 1961269}, {'message': ".replace(jsSuffixRegExp, '');", 'report_id': 1961270}]
JSON输出
要产生 JSON 输出:
print(json.loads(json.dumps(jq(".").transform(text=str, multiple_output=True) )))
此 python3 脚本展示了如何读取文件中的 JSON 实体流,以及如何 "slurp" 将它们放入数组中,仅使用以下两个 headers:
import json
from splitstream import splitfile
infile='json.txt'
# Assuming filename contains a stream of JSON texts,
# this function returns each as a Python string
# that can be read using json.loads(_)
def stream(filename):
with open(filename, 'r') as f:
for s in splitfile(f, format="json"):
yield s
obj = []
for jstr in stream(infile):
obj += [ json.loads(jstr) ]
print( json.dumps( obj ) )
输出
[{"message": ".replace(commentRegExp, '')", "report_id": 1961272}, {"message": ".replace(currDirRegExp, '')", "report_id": 1961269}, {"message": ".replace(jsSuffixRegExp, '');", "report_id": 1961270}]
格式化输出
$ python3 slurpfile.py | jq .
[
{
"message": ".replace(commentRegExp, '')",
"report_id": 1961272
},
{
"message": ".replace(currDirRegExp, '')",
"report_id": 1961269
},
{
"message": ".replace(jsSuffixRegExp, '');",
"report_id": 1961270
}
]