【发布时间】:2021-01-06 22:18:26
【问题描述】:
我在我的 python 项目中使用官方的 graphene 包。我有一个来自正在运行的 Docker 容器检查命令的巨大嵌套 JSON 数据,我想从中获取一些字段。我可以逐个选择所有这些字段并将它们添加到这样的字典中:
def ContainerConfigs(configs):
data = {}
data['Command'] = configs['Args'][-1]
data['Hostname'] = configs['Config']['Hostname']
data['Image'] = configs['Config']['Image']
data['Distro'] = configs['Config']['Labels']['org.label-schema.name']
data['WorkDir'] = configs['Config']['WorkingDir']
data['IPAddress'] = configs['NetworkSettings']['Networks']['bridge']['IPAddress']
return data
但这是一个弱解决方案。我认为可以使用 GraphQL 对其进行优化。没有服务器、请求和响应。我想创建它的Schema 类并发送参数(JSON 和查询)并让函数执行该查询并返回结果。像这样的:
import graphene
# I need to find this part of the code
# class Schema(..):
# ...
# class Query(...):
# ...
def ContainerConfigs(configs, query):
schema = graphene.Schema(query=Query)
# I need to find a way to pass the configs (Json data) to the Query class to
# execute the query_string on the data
query_string = """
query {
Args
Config {
Hostname
Image
WorkingDir
Label{
org.label-schema.name
}
}
NetworkSettings{
Networks{
bridge{
IPAddress
}
}
}
}
"""
result = schema.execute(query_string)
return result
【问题讨论】:
-
您遇到了什么具体问题?一旦你检索到这些数据,你最终会用它做什么?
-
我正在尝试对数据执行查询并回复结果。
-
这里对我来说不明显的另一件事是 GraphQL 查询的结果将具有与输入数据相同的“形状”;您必须使用相同的嵌套字典语法来访问它。这似乎不是一项适合我的明显技术。
-
没有服务器? schema 用于服务器...如果您知道它是如何工作的,您可以模拟响应,它只是 json(将您的 json 转换为所需的响应形状),也许可以使用一些石墨烯部件...但您不知道它是如何工作的,先学吧
-
@DavidMaze 所以,你的意思是最好使用上面的脚本逐个选择所有这些字段?我认为会有一种更好的优化方法来从 python 中的 JSON 数据中获取这些任意字段。我认为 GraphQL 在这种情况下会很有帮助。我已经搜索了很多,但找不到任何合适的结果。其中大部分是关于 GraphQL 在 Django 或 Flask 等 Web 框架中的使用。
标签: python json docker graphql graphene-python