我在SQL Server中有一个表,用于保持所有用户的应用程序审查. 当用户用4星或5星 comments 应用程序时,我会收到这样的JSON

{
    "Calificacion": 5,
    "Cuestionario": "",
    "Comentarios": "",
    "Application": "APLIC004"
}

当TE用户给我们一个3星或更低的 comments 时,前端给我发来的JSON是这样的

{
  "Calificacion": 0,
  "Cuestionario": [
    {
      "Order": 1,
      "Question": "string",
      "Answer": true
    }
    {
      "Order": 2,
      "Question": "string",
      "Answer": true
    }
    {
      "Order": 3,
      "Question": "string",
      "Answer": true
    }
    {
      "Order": 4,
      "Question": "string",
      "Answer": true
    }
  ],
  "Comentarios": "string",
  "Application": "string"
}

问题是,当我试图从用户查询最近的记录时,当最近的记录没有列Cuestionario的数据时,我得到了这条消息

消息13609,级别16,状态2,第114行JSON文本不正确 已格式化.意外字符‘.’在位置0处找到.

我用来获取数据的查询如下

select TOP 1
  UserId,
  Fecha,
  Calificacion,
  JSON_QUERY(Cuestionario) Cuestionario,
  Comentarios,
  [Application]
from AppScores
where UserId = '00000000-0000-0000-0000-000000000000'
order by Fecha desc
for json path, WITHOUT_ARRAY_WRAPPER

推荐答案

出现您遇到的错误消息是因为SQL Server希望Cuestionario列中的值是格式良好的JSON对象,但当评级为4星或5星时,您得到的是空字符串.

CREATE TABLE AppScores (
    UserId UNIQUEIDENTIFIER,
    Fecha DATETIME,
    Calificacion INT,
    Cuestionario NVARCHAR(MAX),
    Comentarios NVARCHAR(MAX),
    [Application] NVARCHAR(50)
);

INSERT INTO AppScores (UserId, Fecha, Calificacion, Cuestionario, Comentarios, [Application])
VALUES ('00000000-0000-0000-0000-000000000000', GETDATE(), 5, '', '', 'APLIC004');

INSERT INTO AppScores (UserId, Fecha, Calificacion, Cuestionario, Comentarios, [Application])
VALUES ('00000000-0000-0000-0000-000000000000', DATEADD(DAY, -1, GETDATE()), 3, '[
        {
          "Order": 1,
          "Question": "string",
          "Answer": true
        },
        {
          "Order": 2,
          "Question": "string",
          "Answer": true
        },
        {
          "Order": 3,
          "Question": "string",
          "Answer": true
        },
        {
          "Order": 4,
          "Question": "string",
          "Answer": true
        }
      ]', 'string', 'string');

2 rows affected
SELECT TOP 1
       UserId,
       Fecha,
       Calificacion,
       JSON_QUERY(CASE
                     WHEN LEN(Cuestionario) = 0 THEN '[]'
                     ELSE Cuestionario
                  END) AS Cuestionario,
       Comentarios,
       [Application]
FROM AppScores
WHERE UserId = '00000000-0000-0000-0000-000000000000'
ORDER BY Fecha DESC
FOR JSON PATH, WITHOUT_ARRAY_WRAPPER;

JSON_F52E2B61-18A1-11d1-B105-00805F49916B
{"UserId":"00000000-0000-0000-0000-000000000000","Fecha":"2023-08-14T20:52:25.167","Calificacion":5,"Cuestionario":[],"Comentarios":"","Application":"APLIC004"}

fiddle

Json相关问答推荐

jq不会为空输入返回非零

使用Jolt变换转换JsonArray以将关键字转移到内部JsonArray中

如何在我的响应模型中修复此问题:[期望的值类型为';Map<;Dynamic,Dynamic&>;,但获得的值类型为';NULL&39;]

织女星-没有循环的动画条形图第二部分(实际上是织女星)

使用JQ在数组中 Select 第一个具有匹配项的项

如何按键过滤

将请求中的数据推送到数组中

父键中的 Perl JSON 数组

如何将从嵌套 Select 返回的空值转换为空数组?

Flutter:在本地文件 json 中搜索特殊的阿拉伯字符

Microsoft GRAPH 查询使用端点 /deviceManagement/deviceHealthScripts 列出了一种不熟悉的检测脚本内容格式

无法向 Json 数组添加新元素

如何使用 LINQ 在 C# 中重构对象?

使用基本身份验证通过 CURL 发布 JSON

未捕获的类型错误:无法读取 null 的属性props

在 Bash 中访问 JSON 对象 - 关联数组/列表/另一个模型

我们可以使用 JSON 作为数据库吗?

使用 Python 3 读取 JSON 文件

在 HTML 数据属性上添加 JSON 是不是很糟糕?

Javascript:如何判断 AJAX 响应是否为 JSON