【问题标题】:How to pass a variable as a value in JSON如何在 JSON 中将变量作为值传递
【发布时间】:2021-11-13 00:22:39
【问题描述】:

可以在 SQL 查询中放置代码中的任何变量,例如:

sqlalchemy_query= f'''
    order_id,
    order_sum
    from some_table_name
    where customer_id ={some_variable}
'''

正如你所看到的,这里的一切都很简单:f-string,我的变量在大括号中。很好,很简单,而且很有效。

但是,noSQL DB 的类似 JSON 查询中的大括号对我不起作用。我正在使用带有 JSON 查询的 elasticsearch Python 客户端。

    {
       ...
       "customer_id": {some_variable_from_code}
       ...
    }

那么如何在 Python 中传递 JSON 字符串中的变量呢?

有没有我需要转义的角色,like in .NET

【问题讨论】:

  • noSQL DB 的 JSON 查询 - 你能告诉我们你使用的是什么 API 吗?它可以为您进行序列化。否则,坚持使用 python 数据结构并使用json.dumps 进行序列化。
  • @tdelaney 我使用的是弹性搜索 Python 客户端。它允许在 JSON 中使用查询。
  • elasticsearch 通常会为您进行序列化。坚持使用 python 数据结构。

标签: python json python-3.x


【解决方案1】:

这里没有 JSON。 JavaScript Object Notation 是数据的序列化表示。一旦你将它反序列化为 python,它就不是 JSON。当您执行{some_variable_from_code} 时,这是一个具有单个值的python 集。你可以这样做

{
    "customer_id": some_variable_from_code
}

在您创建了 python dict 之后,它会序列化为 JSON 以进行调用,但这是在幕后发生的。

【讨论】:

    【解决方案2】:

    如果格式化为 f 字符串的查询包含文字花括号,在这种情况下,您需要将花括号加倍:

    some_variable_from_code = "foo"
    query_string = f"""{{"customer_id": {some_variable_from_code}}}"""
    print(query_string)
    

    结果:

    {"customer_id": foo}
    

    【讨论】:

    • 但您似乎正在尝试在这里构建 JSON,这是一个坏主意。这就是json.dumps 的用途。 some_variable_from_code 很可能包含在 JSON 中不合法的字符。例如双引号。如果它是一个布尔值,“真”而不是“真”。
    • 只是试图满足他们所在的 OP,它试图解析一个字符串以作为查询传递,并陷入字符串格式错误。正如您之前提到的,这实际上与 JSON 无关,他们只是试图克服字符串格式问题。在我的编程之旅中,我因试图过早地优化“最佳实践”而陷入困境,而实际上在这个阶段 OP 只是在寻找可以发挥作用的东西。
    • 这个答案被赞成和接受,即使它没有回答真正的问题我需要逃避任何角色。这不是正确的做法。
    • @t 谢谢大家。这个答案正是我想要的。如果有任何不清楚的地方,我深表歉意。我将在这里澄清我需要在 ElasticSearch 的 JSON 查询中使用一个变量。简而言之,我使用 Python 连接到 ES 并使用 JSON 查询对其进行查询。因为我想自动化我的工作以供将来使用,我需要在查询中传递一个变量,我将能够重新运行所有内容,而无需逐个更改每个查询。
    猜你喜欢
    • 1970-01-01
    • 2017-10-14
    • 2021-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多