【问题标题】:How to get a JSON object from a list with dictionaries (single quote to double quotes)如何从带有字典的列表中获取 JSON 对象(单引号到双引号)
【发布时间】:2021-10-11 06:14:32
【问题描述】:

在我的 python 脚本中,我想做一个以 JSON 数组作为参数的 rpc 调用。

rpc.command(JSONarray1, JSONarray2, 0, true)

为了获取 JSONarray,我创建了以字典为元素的列表。字典将字符串作为键,将字符串或浮点数/整数作为值。

mylist1 = 
[
    {
        'tixid': 'c1636efe3d85e3bb7e58663cfa976590ed1a9bb6740e7b851cbb34ab63f52ab9',
        'vout': 2,
        'sequence': 4294967293
    },
    ...,
]

mylist2 =
[
    {
        'bc1q0eg3madqa38t5usru66nvjzgqkdc7qz9n9qemw': 0.0001
    },
    ...,
]

当我将 mylist 传递给 rpc 调用时,我得到一个错误。 “值不是预期的字符串”

问题是,python 对 mylist 中的字符串使用单引号。 我知道,python 不在乎您是对字符串使用单引号还是双引号,但是我正在使用的 rpc 调用确实...

我尝试使用json.dumps(mylist)。 问题是 json.dumps() 返回一个 rpc 调用无法处理的字符串 - 需要 JSON 数组。将json.dump() 放入文件中并使用json.load()

我试过numpy.array(str_mylist)。但是 rpc 调用再次无法处理这个数组 - 需要 JSON 数组。

有什么建议可以“强制”我的 python 脚本对 mylist 中的字符串使用双引号吗?

【问题讨论】:

  • 当你说:json.dumps() returns a string which the rpc call can't handle,为什么它不能处理一个字符串?你已经说过你看到:"value is not a string as expected" 当你传入一个列表时。
  • json.dumps() 将 mylist 作为字符串返回。并且字符串不能被 rpc 调用用作 json 对象。但是 rpc 调用可以处理 json 对象内的字符串
  • 所有 JSON 值都是字符串;这就是 JSON:数据结构的字符串编码。json.dumps(mylist) 是正确的做法,如果 RPC 真的期望 JSON 对象数组作为其参数。你看过json.dumps(mylist)返回的值吗?
  • 您能否提供一个有效调用rpc.command 的示例?我希望你需要像 rpc.command('[{"id": "...", "sequence": 12949, "out": 1, "in": 1.1}]') 这样的东西,除非 sequenceoutin 也应该是字符串,而不是数字(正如 user10133842 所建议的那样)。
  • 我会检查是否可以找到比特币 rpc.commands 的特定 python 文档...

标签: python json list


【解决方案1】:

“value is not a string as expected”似乎指向'sequence'、'out'和'in'的非字符串值。如果您的 rpc 调用需要一个字符串,那么您可能需要将 'sequence'、'out' 和 'in' 的值设置为字符串而不是整数或浮点数。例如'sequence':'12949' 而不是 'sequence': 12949

【讨论】:

  • 我试过这个。即使我将所有键和值都设置为字符串。我仍然收到错误消息:“值不是预期的字符串”。我认为问题是(如原始帖子中所述),python 使用单引号('string')而不是双引号(“string”)在列表中设置字符串。并且 json 数组中的单引号不会作为字符串出现在 rpc 调用中
  • Python 表示自己的数据类型与您需要什么 JSON 的问题无关。 json.dumps(mylist) 将产生一个包含双引号字符串的字符串值。
  • 如果我使用 json.dumps(mylist) 我得到错误:“expected type array, got string”...
【解决方案2】:

不确定它是否相关,但是您在第一个对象中的键值对 'out': 1 和第二个对象中的 'out': 2 之后缺少逗号,这本身会导致 json 格式化程序崩溃。

【讨论】:

  • 我的错 - 你是对的,但这只是在这篇文章的示例代码中所缺少的。不在我的剧本中。编辑了原帖
【解决方案3】:

我可以缩小范围,并在我的代码中找到导致错误的错误。 我在 mylist1 中的键值输入错误。我使用的是“tixid”而不是“txid”。

我发现它有点令人困惑,错误是“值不是预期的字符串”。在这种情况下,我希望“key 不是预期的字符串”。因为它是一个带有键:值对的字典。还是在 json 数组中有所不同?

无论如何,脚本现在正在运行。支持所有输入的坦克!

【讨论】:

    猜你喜欢
    • 2020-05-26
    • 2021-09-03
    • 2015-10-29
    • 2013-02-01
    • 1970-01-01
    • 2011-05-08
    • 2016-11-17
    • 1970-01-01
    相关资源
    最近更新 更多