转换json查询以插入一个变量,并将其重新转换为json查询



我有点沮丧。我从浏览器中的网络选项卡复制了以下元数据库查询字符串:

query = "{"database":17,"query":{"source-table":963,"filter":["and",["=",["field",17580,null],"XXXXXX_XXXXXX"],["=",["field",17599,null],"**chl-43d813dd-05a7-45b8-a5b0-8eb960289aa5**"]],"fields":[["field",17579,null],["field",17569,null],["field",17572,null],["field",17586,null],["field",17592,{"temporal-unit":"default"}],["field",17611,null],["field",17582,null],["field",17597,null],["field",17603,null],["field",17607,null],["field",17576,null],["field",17588,null],["field",17596,null],["field",17608,null],["field",17587,{"temporal-unit":"default"}],["field",17578,{"temporal-unit":"default"}],["field",17602,null],["field",17606,null],["field",17605,{"temporal-unit":"default"}],["field",17601,null],["field",17590,null],["field",17580,null],["field",17598,{"temporal-unit":"default"}],["field",17577,null],["field",164910,null],["field",46951,null],["field",46952,{"temporal-unit":"default"}]]},"type":"query","middleware":{"js-int-to-string?":true,"add-default-userland-constraints?":true}}"

作为下一步,我想将其转换为String,用变量替换粗体引用。字符串如下所示:

query = '{"database":17,"query":{"source-table":963,"filter":["and",["=",["field",17580,null],"XXXXXXXX-XXXXXXXX"],["=",["field",17599,null],"'+channelRef+'"]],"fields":[["field",17579,null],["field",17569,null],["field",17572,null],["field",17586,null],["field",17592,{"temporal-unit":"default"}],["field",17611,null],["field",17582,null],["field",17597,null],["field",17603,null],["field",17607,null],["field",17576,null],["field",17588,null],["field",17596,null],["field",17608,null],["field",17587,{"temporal-unit":"default"}],["field",17578,{"temporal-unit":"default"}],["field",17602,null],["field",17606,null],["field",17605,{"temporal-unit":"default"}],["field",17601,null],["field",17590,null],["field",17580,null],["field",17598,{"temporal-unit":"default"}],["field",17577,null],["field",164910,null],["field",46951,null],["field",46952,{"temporal-unit":"default"}]]},"type":"query","middleware":{"js-int-to-string?":true,"add-default-userland-constraints?":true}}' 

q = json.dumps(query)

结果看起来正是我想要的:

q = "{"database":17,"query":{"source-table":963,"filter":["and",["=",["field",17580,null],"XXXXXXXX-XXXXXXXX"],["=",["field",17599,null],"**chl-caabef81-f081-4532-9b6e-ac20b3d4c6cf**"]],"fields":[["field",17579,null],["field",17569,null],["field",17572,null],["field",17586,null],["field",17592,{"temporal-unit":"default"}],["field",17611,null],["field",17582,null],["field",17597,null],["field",17603,null],["field",17607,null],["field",17576,null],["field",17588,null],["field",17596,null],["field",17608,null],["field",17587,{"temporal-unit":"default"}],["field",17578,{"temporal-unit":"default"}],["field",17602,null],["field",17606,null],["field",17605,{"temporal-unit":"default"}],["field",17601,null],["field",17590,null],["field",17580,null],["field",17598,{"temporal-unit":"default"}],["field",17577,null],["field",164910,null],["field",46951,null],["field",46952,{"temporal-unit":"default"}]]},"type":"query","middleware":{"js-int-to-string?":true,"add-default-userland-constraints?":true}}"

但是当我使用这个查询字符串发送API请求时,我会得到以下错误消息:

{"via":[{"type":"java.lang.ClassCastException"}],"trace":[],"message":null}

Traceback(最后一次调用(:文件";c: \Users\XXXX\Documents\XXXXXXXX\Test.py";,第308行,在main((文件";c: \Users\XXXX\Documents\XXXXXXXX\Test.py";,线路114,在主some_function(XXXX, window, selected_path)中文件";c: \Users\XXXX\Documents\XXXXXXXX\Test.py";,第290行,在some_function中dataframe=dataframe(结果(文件";C: \Users\XXXX\AppData\Roaming\Python\Python310\site-packages\pandas\core\frame.py";,第756行,在init中引发ValueError("DataFrame构造函数未正确调用!"(ValueError:未正确调用DataFrame构造函数!

有人知道吗?

提前非常感谢!

您可以使用内置的json模块:

import json
query = "{"database":17,"query":{"source-table":963,"filter":["and",["=",["field",17580,null],"XXXXXX_XXXXXX"],["=",["field",17599,null],"**chl-43d813dd-05a7-45b8-a5b0-8eb960289aa5**"]],"fields":[["field",17579,null],["field",17569,null],["field",17572,null],["field",17586,null],["field",17592,{"temporal-unit":"default"}],["field",17611,null],["field",17582,null],["field",17597,null],["field",17603,null],["field",17607,null],["field",17576,null],["field",17588,null],["field",17596,null],["field",17608,null],["field",17587,{"temporal-unit":"default"}],["field",17578,{"temporal-unit":"default"}],["field",17602,null],["field",17606,null],["field",17605,{"temporal-unit":"default"}],["field",17601,null],["field",17590,null],["field",17580,null],["field",17598,{"temporal-unit":"default"}],["field",17577,null],["field",164910,null],["field",46951,null],["field",46952,{"temporal-unit":"default"}]]},"type":"query","middleware":{"js-int-to-string?":true,"add-default-userland-constraints?":true}}"
my_json = json.loads(query)
# make edit's (works like a dict)
query = json.dumps(my_json)

我在JSON字符串中没有看到粗体引用,但这都是用JSON库处理的:

import json
query = "YOUR QUERY STRING"
object = json.dumps(query)
# Make your changes to your dict object here
new_query = json.loads(object)

最新更新