gpt4 book ai didi

json - 如何在引号前没有反斜杠的情况下在python Graphite 烯解析器中返回json

转载 作者:行者123 更新时间:2023-12-04 17:06:48 27 4
gpt4 key购买 nike

我在 python (Flask + Graphene) 中有一个后端服务器,我需要返回一个像这样的 JSON 对象:

{
's1': "Section 1",
's2': "Section 2",
's3': "Section 3",
's4': "Section 4"
}

解析器如下所示:
 questionnaire = graphene.types.json.JSONString(
description='JSON result test')

def resolve_questionnaire(self, info: graphql.ResolveInfo):
sections = {
's1': "Section 1",
's2': "Section 2",
's3': "Section 3",
's4': "Section 4"
}

print(json.dumps(sections))
return sections

在控制台中我看到 print(json.dumps(sections)) 的结果正如我所期望的:
user-api_1  | {"s1": "Section 1", "s2": "Section 2", "s3": "Section 3", "s4": "Section 4"}

但在 GraphiQL 中,我看到所有引号都带有反斜杠:
enter image description here

当我更改 return sectionsreturn json.dumps(sections)我得到这样的结果:
enter image description here

问题是如何在 Graphite 烯解析器中正确返回 JSON 对象?
我知道有 json.replace 方法可以使用,例如 here ,但我相信我只是以错误的方式生产/传递对象。

最佳答案

你的初步结果

{
"data": {
"questionnaire": "{\"s1\": \"Section 1\", \"s2\": \"Section 2\", \"s3\": \"Section 3\", \"s4\": \"Section 4\"}"
}
}

是预期的行为。毕竟, questionnaire解析为 JSON 字符串 .因为它是一个字符串,所以它必须被双引号,因此它的内部引号必须被转义。这是根据 JSON's standards .

要使用该字符串,您必须在 data.questionnaire 上运行某种 JSON 解析器。目的。例如,在 javascript 中,它将类似于:

var data;
// Fetching logic to get the data object from your GraphQL server
var sections = JSON.parse(data.questionaire);

// Now you can access its objects
console.log(sections.s1) // Should print "Section 1" on the dev console

但是,如果 sections 的 key ,上述方法并不理想。不是预先确定的(在一种情况下 sections.s5 可能是 已定义 但在另一种情况下是 未定义 )。相反,您可能宁愿拥有一个可以迭代的数组。为此,您必须定义一个具有显式键值对的“模型”。这样做也是适合 GraphQL 的格式。例如:

import graphene

# Our new model
class Section(graphene.ObjectType):
key = graphene.String() # dictionary key
header = graphene.String() # dictionary value

# Your previous schema with modifications
class Query(graphene.ObjectType):
# questionnaire = graphene.types.json.JSONString(description='JSON result test')

# Return a list of section objects
questionnaire = graphene.List(Section)

def resolve_questionnaire(self, info: graphql.ResolveInfo):
sections = {
's1': "Section 1",
's2': "Section 2",
's3': "Section 3",
's4': "Section 4"
}

sections_as_obj_list = [] # Used to return a list of Section types

# Create a new Section object for each item and append it to list
for key, value in sections.items(): # Use sections.iteritems() in Python2
section = Section(key, value) # Creates a section object where key=key and header=value
sections_as_obj_list.append(section)

# return sections
return sections_as_obj_list

现在,如果我们运行查询:
query {
questionnaire {
key
header
}
}

它返回一个可以迭代的 JSON 数组。
{
"data" {
"questionnaire": [
{
"key": "s1",
"header": "Section 1"
},
{
"key": "s2",
"header": "Section 2"
},
{
"key": "s3",
"header": "Section 3"
},
{
"key": "s4",
"header": "Section 4"
},
]
}
}

关于json - 如何在引号前没有反斜杠的情况下在python Graphite 烯解析器中返回json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51837996/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com