-1

我有看起来像这样的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
 }
]
4

4 回答 4

1

以下是读取 JSON 文本流的通用解决方案。它们不需要用换行符分隔。但是,假设在您的路径上。

为了说明,问题中显示的 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:)

于 2018-08-01T06:41:24.633 回答
0

以下使用“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) )))
于 2018-08-01T08:22:24.180 回答
0

这个 python3 脚本展示了如何读取文件中的 JSON 实体流,以及如何将它们“slurp”到一个数组中,仅使用以下两个标头:

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
  }
]
于 2018-08-01T22:24:15.073 回答
-1

像这样的东西会分裂根元素

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 根元素,然后用逗号分隔它们并在开始和结束处附加方括号

于 2018-07-31T10:53:59.457 回答