根据HTTP_USER_AGENT的不同,我必须向客户机返回json结构的一个非常特殊的格式化版本。
json对象是使用标准postgres函数照常生成的。假设生成的json如下所示:
{
"return_code" : 0,
"payload" : {
"name" : "smith",
"age": 17,
"address" :{
"street" : "<whatever>",
"city" : "<anycity>"
}
}
}
现在,在某些情况下,我必须以以下格式返回此json:
{
"return_code" : 0,
"payload" : "{"name" : "smith", "age": 17, "address" :"{"street" : "<whatever>", "city" : "<anycity>"}"}"
}
正如您所看到的,为了提高可读性,应该将嵌套的有效负载对象作为字符串掩码返回,此处将其忽略。
此外,address属性也应该作为字符串返回,而不是作为json对象返回。
我的postgres代码应该做到这一点很简单:
response := jsonb_set(response, '{payload}', to_jsonb((response->'payload')::text));
但上述代码的结果如下所示:
{
"return_code" : 0,
"payload" : "{"name" : "smith", "age": 17, "address" :{"street" : "<whatever>", "city" : "<anycity>"}}"
}
考虑一下address-object的引号缺失(只有两个)。我该如何解决这个问题呢?
谢谢!
发布于 2017-07-21 23:16:52
在我看来,您需要对address
属性进行更深一层的转义/引用,因为您拥有:
{ "payload" : "{ ... }" }
{ "address": "{ ... }" }
{ "payload" : { ... } }
-> Your substitution:{ "address": { ... } }
-> substitution您需要在现有行之前执行此操作,所以我认为您需要这样(需要一个额外的jsonb
变量payload
):
payload := jsonb_set(response->'payload', '{address}', to_jsonb((response->'payload'->address)::text));
response := jsonb_set(response, '{payload}', to_jsonb(payload::text));
https://stackoverflow.com/questions/45241012
复制相似问题