JSONからの読み込み中に文字列をリストに変換する方法

2020-08-02 python json

Jsonは下にあります。 jsonからロードした後、リストに変換する必要があります。私はstrとして取得しています

{
  "1": {
    "Data (L)": "[  { \"S\" : \"168\" }]"
  },
  "2": {
    "Data (L)": "[  { \"S\" : \"169\" }]"
  }
}

コード

with open('a.json') as f:
    a = json.loads(f.read())
print (a)
data1 = []
for i,j in a.items():
    data = {}
    data['id'] = i
    data1.append(data)
    for k,l in j.items():
        data[k] = l
        print (type(l))
        print (l)

私のタイプpf lは<class 'str'>で、 l出力は[ { "S" : "168" }]

予想される

印刷タイプ(l)はstrではなくリストでなければなりません

Answers

私はあなたがダブルエンコードされたjsonを持っていると思います。 2番目の辞書の値で別のjson.loads()を呼び出すだけです。

import json

json_text = r'''{
  "1": {
    "Data (L)": "[  { \"S\" : \"168\" }]"
  },
  "2": {
    "Data (L)": "[  { \"S\" : \"169\" }]"
  }
}'''

data = json.loads(json_text)

for k, v in data.items():
    for kk, vv in v.items():
        vv = json.loads(vv)
        print(type(vv))
        print(vv)

プリント:

<class 'list'>
[{'S': '168'}]
<class 'list'>
[{'S': '169'}]

お勧めの方法ではありません!

この方法でeval()関数を使用することは安全ではありませんEvalは本当に危険です。 ( @KarlKnechtelに感謝 コメントのため !)

代わりに、 ast.literal_eval()を使用できます。 Pythonのeval()とast.literal_eval()の比較を参照してください 。 ( コメントをありがとう@Sushanth !)


以下の最初の回答

次のように組み込みのeval()関数を使用できます。

s = "[  { \"S\" : \"168\" }]"
t = eval(s)

print(t)
print(type(t))
print(t[0])
print(type(t[0]))

印刷する

[{'S': '168'}]
<class 'list'>
{'S': '168'}
<class 'dict'>

Related