错误:json postgreSQL NodeJS类型的输入语法无效

错误:json postgreSQL NodeJS类型的输入语法无效,json,postgresql,Json,Postgresql,我犯了以下错误 错误:json类型的输入语法无效 我不知道我做错了什么。我认为smt与插入值有关。谢谢您的帮助。您缺少JSON字符串周围的引号。这应该起作用: 等待this.db.query( `更新来宾组 设置自定义_字段=jsonb_insert(自定义_字段,{0},{“值”:$3,“显示_名称”:“跟踪”,“服务_标记”:[“跟踪”]}]::jsonb,true) 其中“{”value:$1}”服务标签“=”[“全名”]::jsonb) 和“{”value:$2}”服务标签“=”[“房间

我犯了以下错误

错误:json类型的输入语法无效


我不知道我做错了什么。我认为smt与插入值有关。谢谢您的帮助。

您缺少JSON字符串周围的引号。这应该起作用:

等待this.db.query(
`更新来宾组
设置自定义_字段=jsonb_insert(自定义_字段,{0},{“值”:$3,“显示_名称”:“跟踪”,“服务_标记”:[“跟踪”]}]::jsonb,true)
其中“{”value:$1}”服务标签“=”[“全名”]::jsonb)
和“{”value:$2}”服务标签“=”[“房间号”]::jsonb)`[
JSON.stringify(trace.guestName),
JSON.stringify(trace.guestRoomNumber),
stringify(trace.value)
]);
但是,我宁愿将整个JSON(B)值传递给查询,并让node pg进行转义:

await this.db.query(
  `UPDATE guest_group
  SET custom_fields = jsonb_insert(custom_fields, '{0}', $3::jsonb, true)
  WHERE $1 <@ ANY(
  SELECT el
  FROM jsonb_array_elements(custom_fields) AS el
  WHERE el->'servicio_tags' = '["full-name"]'::jsonb)
  AND $2 <@ ANY(
  SELECT el
  FROM jsonb_array_elements(custom_fields) AS el
  WHERE el->'servicio_tags' = '["room-number"]'::jsonb)`,[
   {"value": trace.guestName },
   {"value": trace.guestRoomNumber },
   {"value": trace.value, "display_name": "Traces", "servicio_tags": ["trace"]}
]);
AppTrace {
  value:'test',
  guestName: 'Bortolotti, Ingrid',
  guestRoomNumber: '422',
}
await this.db.query(
  `UPDATE guest_group
  SET custom_fields = jsonb_insert(custom_fields, '{0}', $3::jsonb, true)
  WHERE $1 <@ ANY(
  SELECT el
  FROM jsonb_array_elements(custom_fields) AS el
  WHERE el->'servicio_tags' = '["full-name"]'::jsonb)
  AND $2 <@ ANY(
  SELECT el
  FROM jsonb_array_elements(custom_fields) AS el
  WHERE el->'servicio_tags' = '["room-number"]'::jsonb)`,[
   {"value": trace.guestName },
   {"value": trace.guestRoomNumber },
   {"value": trace.value, "display_name": "Traces", "servicio_tags": ["trace"]}
]);
await this.db.query(
  `UPDATE guest_group
  SET custom_fields = jsonb_insert(custom_fields, '{0}', $3::jsonb, true)
  WHERE EXISTS (
    SELECT 1
    FROM jsonb_array_elements(custom_fields) AS el
    WHERE el->>'value' = $1
      AND el->'servicio_tags' = '["full-name"]'::jsonb)
  AND EXISTS (
    SELECT 1
    FROM jsonb_array_elements(custom_fields) AS el
    WHERE el->>'value' = $2
      AND el->'servicio_tags' = '["room-number"]'::jsonb)
`, [
   trace.guestName,
   trace.guestRoomNumber,
   {"value": trace.value, "display_name": "Traces", "servicio_tags": ["trace"]}
]);