pgsql中json格式数组查询结果变成了字符串

场景复原

最近使用到了json的数组,用来存储多个文件的值,发现在连表查询的时候返回结果变成了字符串。

 {
            "id": "repl-placeholder-007",
            "sn": "63165580943163393",
            "name": "1212",
            "implementPlanID": "2632920653191188481",
            "auditLeaderID": "1000",
            "auditLeaderInfo": null,
            "status": "draft",
            "deleted": false,
            "userID": "10000",
            "userInfo": null,
            "appInstanceID": "88888888",
            "createdAt": "repl-placeholder-008",
            "updatedAt": "repl-placeholder-009",
            "auditImplementPlan": {
                "id": "repl-placeholder-010",
                "sn": "",
                "auditName": "1212",
                "createdAt": "repl-placeholder-011",
                "updatedAt": "repl-placeholder-012",
                "annualPlanID": "1",
                "auditType": "all",
                "auditLeaderID": "12",
                "auditDate": "repl-placeholder-031",
                "remark": "",
                "deleted": false,
                "createdBy": "1000",
                "appInstanceID": "1212",
                "attaches": "[\"jimeng.io\",\"baidu.com\"]"
                "attaches": [
                    "jimeng.io",
                    "baidu.com"
                ]
            },
            "attaches": "[\"jimeng.io\",\"baidu.com\"]"
            "attaches": [
                "打豆豆.io",
                "baidu.com"
            ]
        }}

我们发现attaches被转换成了字符串,但是我attaches字段明明定义的是json类型的,但是返回 结果变成了字符串。

我们来看下数据库的字段

 ADD COLUMN "attaches" text NOT NULL DEFAULT ‘[]‘::jsonb;
可以看到用的是json类型

还有就是在查询的时候使用了to_json

这是to_json的函数的文档描述



把值返回为json或者jsonb。数组和组合被(递归地)转换成数组和对象;否则, 如果有从该类型到json的投影,将使用该投影函数来执行转换; 否则将产生一个标量值。对任何一个数值、布尔量或空值的标量类型, 将使用其文本表达,以这样一种方式使其成为有效的json或者jsonb值。~~~~



所以这是正常的情况,但是我们需要的是以数组的形式输出。这是发现 attaches字段用的是text字段,也就是文本字段,他可能就是导致问题出现的原因, 于是更改了字段的类型为jsonb,发现解决了,attaches的输出已经正常了。

当然这种操作还有一个改进的办法,就是使用数组,而不是json数组,这样也不会出现这些问题了。

ADD COLUMN "attachess" text[] DEFAULT ‘{}‘::text[];

原文地址:https://www.cnblogs.com/ricklz/p/12020238.html

时间: 2024-11-07 02:13:49

pgsql中json格式数组查询结果变成了字符串的相关文章

Delphi中Json格式读写

Json是一种轻量级数据传输格式,广泛应用互联网和各应用中,json主要采用键值对来表示数据项,多个数据项之间用逗号分隔,也可以用于数组.下面注重介绍一下在delphi中使用json,在delphi中使用json常用superobject单元文件,该文件可以在网上下载,最初接触json是在2011年,好久没用这不刚好有项目要用到又折腾了好久,下面做了一个简单的Demo,方便以后忘了能随时查看,具体的json使用可以参看万一老师的博客,记录的很详细,下面的demo主要是将数据库记录转换为json格

把json格式对象转成可提交字符串格式,会过滤掉函数 {a: {b: 3}, b: [1], c: "d"} -> a.b=3&b[0]=1&c=d

var json = { name: "任务名称" , scoreRule: "", score: "", // 如果规则表达式不为空,则默认选中 “按规则表达式计算” unique: 1, startTime: "2014-09-15 20:20:20", endTime: "2014-10-15 20:20:20", status: 1, isTaks: 0, tradeType: 1, descrip

nodejs 获取url中json格式的参数

在使用nodejs时经常使用req.query.参数名 来获取参数的值 例如 url : http://localhost:7778/project?id=1 <span style="font-size:18px;">var id = req.query.id console.log(id);//打印出url的id参数值1 </span> 但是在url中的参数是JSON格式时就出现了问题 url:http://localhost:7778/project?ma

Scala中json格式、字符串、map相互转换

json对象转换为json字符串: import org.json4s.{Formats,NoTypeHints} import org.json4s.jackson.Serialization import org.json4s.jackson.Serialization.write case class userLableLike(id:String,pos:Float,neg:Float,seg:Double) def userLable2Str(data:userLableLike):

jquery解析json格式数据的方法(对象、字符串)

相关函数 函数 描述 JSON.parse() 用于将一个 JSON 字符串转换为 JavaScript 对象. JSON.stringify() 用于将 JavaScript 值转换为 JSON 字符串. //data为字符串类型 则要将字符串类型转换成json数据类型 var jsondatas=eval("("+data+")"); 本文实例讲述了jquery解析json格式数据的方法.分享给大家供大家参考,具体如下: json数据是我们常用的一种小型的数据实

页面中 json 格式显示 数据

在页面中,有时候我们需要的不仅仅是将数据显示出来,而且要以以 json 的格式显示数据,如显示接口的时候 我们需要如下显示 这个时候,主要用到了 <pre> 标签 $.get("/chat", { "query": send_content, "ident": ident }, function (data) { var result = JSON.stringify(JSON.parse(data), null, 4); // 格式

Go net/http获取body中json格式数据

package main import ( "encoding/json" "fmt" "io/ioutil" "net/http" ) type AutotaskRequest struct { RequestID string `json:"requestid"` Clone CloneModel `json:"clone"` Push PushModel `json:"p

AFNNetworking 中json格式不标准的解决办法

在服务端程序  的头部加上   header("content-type:text/json"); 在服务端程序  的头部加上   header("content-type:text/json"); 在服务端程序  的头部加上   header("content-type:text/json"); 在服务端程序  的头部加上   header("content-type:text/json"); 在服务端程序  的头部加上  

iOS中 JSON格式文件的写入和读取

1.写入(本地) NSArray *paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);    NSString *path=[paths objectAtIndex:0];    NSString *Json_path=[path stringByAppendingPathComponent:@"JsonFile.json"];    //==写入文件    NSL