簡體   English   中英

在Python中解析JSON參數中的JSON數據

[英]Parse JSON data in JSON params in Python

可以在內部加載json數據的json嗎?

import json
array = '{"container":"{\"foo\":\"bar\"}"}'
data  = json.loads(array)
print(data['container'])

此代碼中的錯誤:json.decoder.JSONDecodeError:預期為','分隔符:第1行第17列(字符16)

可能,但是您需要更多轉義:

import json
array = '{"container":"{\\"foo\\":\\"bar\\"}"}'
data = json.loads(array)
print(data['container'])

這里的問題是,即使在單引號字符串中, \\"也是單引號的轉義序列。反斜杠需要用另一個反斜杠轉義,以避免這種情況。

以下實現對我適用於Python3.6.6。

碼:

import json
array = '{"container":{"foo":"bar"}}'
data = json.loads(array)
print(data['container'])
print(data['container']['foo'])

輸出:

>>> python3 test.py 
{'foo': 'bar'}
bar

注意:如果在嵌套的Json中使用逗號,則container密鑰的值將是字符串而不是dict類型(在解析之后)。

讓我們來看看:

碼:

import json
array = '{"container":"{\\"foo\\":\\"bar\\"}"}'
data = json.loads(array)
print(data['container'])
print(data['container']['foo'])

輸出:

>>> python3 test.py 
{"foo":"bar"}
Traceback (most recent call last):
  File "test.py", line 5, in <module>
    print(data['container']['foo'])
TypeError: string indices must be integers

如果您確實要使用逗號,則需要再次解析嵌套的Json。

像這樣:

碼:

import json
array = '{"container":"{\\"foo\\":\\"bar\\"}"}'
data = json.loads(array)
print(data['container'])
data2 = json.loads(data['container'])
print(data2['foo'])

輸出:

>>> python3 test.py 
{"foo":"bar"}
bar

嘗試這個

import ast
array = '{"container":"{\\"foo\\":\\"bar\\"}"}'

json_data = ast.literal_eval(array)

print(json_data['container'])  

輸出將為{'foo':'bar'}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM