import json
def convert_to_json_string_1(data):
return json.dumps([{'name': i[0], 'value': i[1]} for i in data], indent=4)
def convert_to_json_string_2(data):
return json.dumps({'data': [{'name': i[0], 'value': i[1]} for i in data]}, indent=4)
with open('some-file.json', 'w') as handle:
handle.write(convert_to_json_string_1(data)
对于初学者上面的代码有可能不是很好理解,下面把第一个函数写的白痴一点:
def convert_to_json_string_1(data):
ret = [] # 需要序列化的列表
for i in data:
tmp = {'name': i[0], 'value': i[1]} # 通过data的每一个元素构造一个字典
ret.append(tmp)
ret = json.dumps(ret, indent=4)
return ret
我觉得你要的结果有可能是:
或者:
json格式其实是把Python对象序列化到一个纯文本文件中(针对Python来说)
json.dumps函数把一个python对象转换(序列化)成json字符串,indent意思是使用4个空格来缩进,这个字符串也就是正常的字符串,你可以:
对于初学者上面的代码有可能不是很好理解,下面把第一个函数写的白痴一点:
關於問題
@pylego 有點出一個問題, 你的輸出範例並非標準的 json (關於 json 的標準定義請參照:Introducing JSON),
{}
是 js 的 object, 類似於 Python 的 dictionary, 他應該是由鍵值對組成的, 你給的範例:顯然不合規定, 所以猜測:
才是你要的。
作法
作法方面應該大家的方法都大同小異, 大致上分成三個部分:
將
data
轉為想要的形式: list of dictionary利用
json
module 將data
轉為json_data
寫到文件裡
(1) 將
data
轉為想要的形式: list of dictionary第一個部分的做法差異比較大, 我選擇先製造出
names
這個 list:其實這跟:
是一樣的, 但是我滿喜歡使用
split
的作法的, 寫起來比較快 (項目多的時候才不會要打那麼多的引號)。接著我利用一個 list comprehension 去製造 list of dictionary:
首先使用
for d in data
來迭代data
中的一個一個 pair, 然後使用zip
去將項目名稱跟對應的值結合在一起:然後
dict
可以吃進一個 iterables (每個項目是一個鍵值對, 比如一個二元素的 tuple), 製造出一個字典。(2) 利用
json
module 將data
轉為json_data
第二部分, 轉出
json_data
, 這相當容易, 使用dumps
就做得到了, 請參閱 json.dumpssort_keys
: 會排序 json 中object
裡面的 key, 可設定可不設定indent
: 設定縮排separators
: 設定 json 輸出的分隔符號,','
用於分隔項目,': '
用於分隔鍵與值ensure_ascii
: 設為False
, 讓打印的時候不要使用 unicode 轉義(3) 寫到文件裡
沒什麼特別的, 使用
with
處理文件開關, 利用print(file=XXX)
輸出我回答過的問題: Python-QA