【问题标题】:json string format done differently [duplicate]json字符串格式不同[重复]
【发布时间】:2022-02-08 23:31:01
【问题描述】:

我有 2 个lists - dates and weekdays

>>> dates
['2022-02-08', '2022-02-09', '2022-02-10', '2022-02-11', '2022-02-12', '2022-02-13', '2022-02-14', '2022-02-15']
>>> weekdays
['Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday', 'Monday', 'Tuesday']

我想为dates 中的每个元素创建一个看起来像这样(例如)的 json 对象。

myjson = {"label": "Tuesday-2022-02-08", "value": "/inform_date{\"date_list\": \"2022-02-08\"}"}

基本上我想运行一个循环,其中 myjson 看起来像上面给出的那样。

data = []
for i in range(len(dates)):
  myjson = {"label": "{0}-{1}".format(weekdays[i], dates[i]), "value": "/inform_date{\"date_list\": \"{}\"}".format(dates[i])}
  data.append(myjson)

但是当我运行上面的 for 循环时出现错误。

构建 myjson 以使其看起来如上例所示的正确方法是什么?

【问题讨论】:

  • 在格式字符串的内部,您想要在输出中使用的大括号需要通过将它们加倍来“转义”。 f"I want this brace ->{{"

标签: python json python-3.x


【解决方案1】:

使用理解和f-strings

import json

data = [{'label': f"{w}-{d}", 'value': f'/inform_date{{"date_list": "{d}"}}'}
            for d, w in zip(dates, weekdays)]
print(json.dumps(data, indent=4))
[
    {
        "label": "Tuesday-2022-02-08",
        "value": "/inform_date{\"date_list\": \"2022-02-08\"}"
    },
    {
        "label": "Wednesday-2022-02-09",
        "value": "/inform_date{\"date_list\": \"2022-02-09\"}"
    },
    {
        "label": "Thursday-2022-02-10",
        "value": "/inform_date{\"date_list\": \"2022-02-10\"}"
    },
    {
        "label": "Friday-2022-02-11",
        "value": "/inform_date{\"date_list\": \"2022-02-11\"}"
    },
    {
        "label": "Saturday-2022-02-12",
        "value": "/inform_date{\"date_list\": \"2022-02-12\"}"
    },
    {
        "label": "Sunday-2022-02-13",
        "value": "/inform_date{\"date_list\": \"2022-02-13\"}"
    },
    {
        "label": "Monday-2022-02-14",
        "value": "/inform_date{\"date_list\": \"2022-02-14\"}"
    },
    {
        "label": "Tuesday-2022-02-15",
        "value": "/inform_date{\"date_list\": \"2022-02-15\"}"
    }
]

【讨论】:

  • 日期也需要加引号。它应该是“2022-02-08”而不是 2022-02-08
  • 我在 Windows 10 机器上的单个反斜杠上插入了 2 个斜杠 -
  • >>> x = json.dumps(data) >>> x '[{"label": "Tuesday-2022-02-08", "value": "/inform_date{\\ "date_list\\": \\"2022-02-08\\"}"}, {"label": "Wednesday-2022-02-09", "value": "/inform_date{\\"date_list\\ ": \\"2022-02-09\\"}"}, {"label": "Thursday-2022-02-10", "value": "/inform_date{\\"date_list\\": \\ "2022-02-10\\"}"}, {"label": "Friday-2022-02-11", "value": "/inform_date{\\"date_list\\": \\"2022-02 -11\\"}"}, {"label": "Saturday-2022-02-12", "value": "/inform_date{\\"date_list\\": \\"2022-02-12\\ "}"}, ]'
  • 使用打印(x)。它只是python的一种转义机制来显示一个字符串的表示。
【解决方案2】:

您的第二个格式字符串有需要转义的“备用”大括号:

myjson = {"label": "{0}-{1}".format(weekdays[i], dates[i]), "value": "/inform_date{{\"date_list\": \"{}\"}}".format(dates[i])}

【讨论】:

    猜你喜欢
    • 2018-09-05
    • 1970-01-01
    • 1970-01-01
    • 2011-07-22
    • 2014-09-05
    • 2014-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多