在Python中将JSON转换为换行分隔的JSON

在Python中将JSON转换为换行分隔的JSON,python,json,google-cloud-platform,google-bigquery,Python,Json,Google Cloud Platform,Google Bigquery,我的目标是将JSON文件转换成一种可以用Python从云存储上传到BigQuery()的格式 我已尝试使用包进行转换,但收到以下错误 JSONDecodeError: Expecting value or ']': line 2 column 1 (char 5) 有人能解决这个问题吗 以下是示例JSON代码: [{ "key01": "value01", "key02": "value02", ... "keyN": "valueN" }, { "ke

我的目标是将JSON文件转换成一种可以用Python从云存储上传到BigQuery()的格式

我已尝试使用包进行转换,但收到以下错误

JSONDecodeError: Expecting value or ']': line 2 column 1 (char 5)
有人能解决这个问题吗

以下是示例JSON代码:

[{
    "key01": "value01",
    "key02": "value02",
    ...
    "keyN": "valueN"
},
{
    "key01": "value01",
    "key02": "value02",
    ...
    "keyN": "valueN"
},
{
    "key01": "value01",
    "key02": "value02",
    ...
    "keyN": "valueN"
}
]
下面是现有的python脚本:

with nlj.open(url_samplejson, json_lib = "simplejson") as src_:
    with nlj.open(url_convertedjson, "w") as dst_:
        for line_ in src_:
            dst_.write(line_)

如果您愿意退出Python,请使用
jq

$ cat a.json 
[{
    "key01": "value01",
    "key02": "value02",
    "keyN": "valueN"
},
{
    "key01": "value01",
    "key02": "value02",
    "keyN": "valueN"
},
{
    "key01": "value01",
    "key02": "value02",
    "keyN": "valueN"
}
]


$ cat a.json | jq -c '.[]'
{"key01":"value01","key02":"value02","keyN":"valueN"}
{"key01":"value01","key02":"value02","keyN":"valueN"}
{"key01":"value01","key02":"value02","keyN":"valueN"}
我使用的迭代器是
'.[]'
遍历数组,而
-c
将每个JSON对象放在一行上

资源:


    • 使用
      jq
      的答案非常有用,但是如果您仍然想使用Python(从问题中可以看出),您可以使用内置的
      json
      模块

      import json
      from io import StringIO
      in_json = StringIO("""[{
          "key01": "value01",
          "key02": "value02",
      
          "keyN": "valueN"
      },
      {
          "key01": "value01",
          "key02": "value02",
      
          "keyN": "valueN"
      },
      {
          "key01": "value01",
          "key02": "value02",
      
          "keyN": "valueN"
      }
      ]""")
      
      result = [json.dumps(record) for record in json.load(in_json)]  # the only significant line to convert the JSON to the desired format
      
      print('\n'.join(result))
      
      {"key01": "value01", "key02": "value02", "keyN": "valueN"}
      {"key01": "value01", "key02": "value02", "keyN": "valueN"}
      {"key01": "value01", "key02": "value02", "keyN": "valueN"}
      
      *我在这里使用
      StringIO
      print
      ,只是为了使样本更易于本地测试


      作为替代方案,您可以使用将其与

      这将获取一个JSON文件并转换为ND-JSON文件。

      import json
      
      with open("results-20190312-113458.json", "r") as read_file:
          data = json.load(read_file)
      result = [json.dumps(record) for record in data]
      with open('nd-proceesed.json', 'w') as obj:
          for i in result:
              obj.write(i+'\n')
      

      希望这对某人有所帮助。

      非常有效的转换方式。在使用jq.Hi时,您是否也有执行相反操作的命令?从新行分隔到格式良好的json arrayPerfect。但一开始,我通过npm错误地抓取了
      jq
      ,结果不是很好。在node.js中,我可以使用
      node jq
      库来做同样的事情<代码>jq.run('.[]','data.json',{output:'compact'})。然后((output)=>{dataStream.push(output)dataStream.push(null)dataStream.pipe(gcFile.createWriteStream({resumable:false,validation:false,元数据:{'Cache Control':'public,max age=31536000')).catch((err)=>{console.log(err)})也适用于python对象(与JSON字符串相反),如下所示:result=[JSON.dumps(item)for items in items]我认为这是最好的答案。为了与文件写入操作相结合,我使用这个答案生成了以下代码片段:
      data=df.To_dict('records')
      output=open('test.json','w')
      output.write('\n'.join([json.dumps(record))
      output.close()