簡體   English   中英

Python:如何在 json 文件中寫入 json 格式的字符串

[英]Python : How to write json formatted string in json file

我有一個要求,我必須在文件中寫入一些JSON字符串。

例如,我有以下字符串

我的 python 代碼:

 S = '''{
"K1": "v1",
"K2" : "\nv2"
}'''

當我嘗試使用 json.dumps(s) 將其寫入 json 文件時,它被寫入如下文件:

"{\"k1\" : \"v1\",\"k2\" : \"\\nv2\"}"

而我需要它是這樣的:

 {
"K1": "v1",
"K2" : "\nv2"
}

在 json 文件中。

如果我將字符串聲明為在 r 之前的原始字符串,則可以實現此目的,但在實際情況下,我無法聲明原始字符串,因為我在 python 變量中獲取字符串值。

注意:我的 json 字符串值中有多個轉義序列,如上述 json 結構中鍵 k2 的值中給出的值。

如果有人幫助我生成具有所需 json 格式的正確 json 文件,我將不勝感激。提前致謝。

將您的變量聲明為

S = {
"K1": "v1",
"K2" : "\nv2"
}

然后它會工作。 例如:

In [16]: s
Out[16]: {'K1': 'v1', 'K2': '\nv2'}

In [17]: st = json.dumps(s)

In [18]: st
Out[18]: '{"K1": "v1", "K2": "\\nv2"}'

In [19]: s1 = '''{
    ...: "K1": "v1",
    ...: "K2" : "\nv2"
    ...: }'''

In [20]: st1 = json.dumps(s1)

In [21]: st1
Out[21]: '"{\\n\\"K1\\": \\"v1\\",\\n\\"K2\\" : \\"\\nv2\\"\\n}"'

更新:如果您的數據以字符串形式出現,請首先使用 json.loads() 將其轉換為字典。 例如:

In [24]: st
Out[24]: '{"K1": "v1", "K2": "\\nv2"}'

In [25]: json.loads(st)
Out[25]: {'K1': 'v1', 'K2': '\nv2'}

In [26]: json.dumps(json.loads(st))
Out[26]: '{"K1": "v1", "K2": "\\nv2"}'

我使用以下修改 python3.6 代碼讓它滿足我的特定要求:

py_string = '''{ "k1":"v1","k2":"\nv2"}'''
valid_json_string = json.dumps(json.loads(py_string ,strict=False))
with open('test.json', 'w') as outfile:
     json.dump(valid_json_string, outfile)

使用這行代碼,我能夠在 json 文件中編寫這個 json 字符串,而無需轉義雙引號和字符串。

Basically, when we paste the json contents directly to assign it to python string,Python will not allow the json valid control characters in string.python string will escape the special control characters like \n will treat as newline.

所以要在 python 字符串中允許它 json.loads() 支持“嚴格”標志。 如果 strict 為 false(默認為 True),則字符串中將允許使用控制字符。 此上下文中的控制字符是字符代碼在 0-31 范圍內的字符,包括“\t”(制表符)、“\n”、“\r”和“\0”。

欲了解更多信息 - https://docs.python.org/3/library/json.html

如果你想要一個簡單的方法,你可以使用jsonwriter
例如:

# pip install jsonwriter
from jsonwriter import file

file = file('yourfilename.json', autosave=True)

file.set('K1', 'v1')
file.set('K2', '\nv2')
# And it will be saved automatically

有關更多信息,請查看 jsonwriter文檔

暫無
暫無

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

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