web-dev-qa-db-ja.com

PythonでJSONを改行区切りJSONに変換する

私の目標は、PythonでJSONファイルをCloud StorageからBigQueryにアップロードできる形式に変換することです( ここで説明 )。

変換に newlineJSON パッケージを使用しようとしましたが、次のエラーが表示されます。

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_)
7
Fxs7576

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"}

*ここでは、サンプルをローカルでテストしやすくするために、StringIOprintを使用しています。

別の方法として、 Python jq binding を使用して 他の答え と組み合わせることができます。

10

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オブジェクトを1行に配置します。

リソース:

8
Felipe Hoffa

これは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')

これが誰かを助けることを願っています。

1
Saurav Joshi