使用自定义变量Python生成Json文件

时间:2017-12-16 12:16:12

标签: python json

我正在尝试生成一个json文件预设,其中包含从input()用户收到的变量。我发现sorta的唯一方法 - 类似于我的here,但它没有显示如何生成一个新的json文件。

输入的一个例子:

Enter the name of the json file:
>>>file

Enter the width:
>>>2

Enter the height:
>>>2

然后将这些输入转换为json文件,如下所示:

{
    "width": "2",
    "height": "2"
    "column": [
        {
            "0": "1255255255"
            "1": "1255255255"
        },
        {
            "0": "1255255255"
            "1": "1255255255"
        }
    ]
}

每个值列表对应一列,列表中的值是一行。如何生成足够的列和行以匹配宽度和高度?

即。 一栏:

        {
            "0": "1255255255"
            "1": "1255255255"
        }

一行:

            "0": "1255255255"

“1255255255”值并不重要,它只是一个占位符。

2 个答案:

答案 0 :(得分:1)

我使用list和dict comprehension生成具有所需键数的所需数量的字典,然后我使用json.dump将字典序列化为JSON格式的字符串(同时提供indent参数,否则生成的JSON将只需一行)并将该字符串保存到使用context manager打开的文件中(打开文件的首选方式)。

import json
import os

filename = input("Enter the name of the json file: ")
width = int(input("Enter the width: "))
height = int(input("Enter the height: "))

# Append .json if user did not provide any extension
if not os.path.splitext(filename)[1]:
    filename += ".json"

with open(filename, 'w') as f:
    json.dump({
        "width": width,
        "height": height,
        "column": [
            {
                str(row_idx): 0 for row_idx in range(height)
            }
            for column_idx in range(width)
        ]
    }, f, indent=4)

print("JSON saved to file {}".format(os.path.abspath(filename)))

测试:

Enter the name of the json file: test_json
Enter the width: 2
Enter the height: 2
JSON saved to file C:\Users\Bojan\.PyCharm2017.3\config\scratches\test_json.json

test_json.json文件的内容:

{
    "width": 2,
    "height": 2,
    "column": [
        {
            "0": 0,
            "1": 0
        },
        {
            "0": 0,
            "1": 0
        }
    ]
}

答案 1 :(得分:1)

您只需要生成所需结构的python表示(列表+ dicts等),然后使用json库将其转储到文件中。

所以在你的情况下,

import json

# Get these from input
filename = "test.json"
width = 3
height = 5
placeholder = 1255255255

obj = {
    "width": width,
    "height": height,
    "column": [{row: placeholder for row in range(height)} for col in range(width)]
}

with open(filename, "w") as out_file:
    json.dump(obj, out_file)