【问题标题】:JSON_QUERY(@data, '$') get only the first element from JSONJSON_QUERY(@data, '$') 仅从 JSON 中获取第一个元素
【发布时间】:2018-06-20 09:00:58
【问题描述】:

我使用 WITHOUT_ARRAY_WRAPPER 从 MSSQL 生成多行 JSON:

{
 "fName":"John",
 "lName":"Smith"
},
{
 "fName":"Emma",
 "lName":"Watson"
},
{
 "fName":"Harry",
 "lName":"Potter"
}

在存储过程中,我正在构建响应:

select json_query(@data, '$') as data,
@status as status,
@responseMessage as message
FOR JSON PATH, WITHOUT_ARRAY_WRAPPER;

但是通过这种方式在数据中我只得到第一个元素:

{
 "data":{
  "fName":"John",
  "lName":"Smith"
 }
}

当我在不使用 WITHOUT_ARRAY_WRAPPER 的情况下提取第一个 JSON 中的数据时,它可以,但是我的 .NET 应用程序出现异常,结果为空且 HTTP 500。

我的 .NET 代码:

    response = await new SQLDataContext().StoredProcedureExecuteReaderAsync<SQLDataResult>("SP_name", parameters);


    public class SQLDataResult
    {
        public SQLDataResult()
        {
            // Status = SQLDataResultStatus.Error;
            status = -1;
            message = "An error occured";
        }

        [JsonProperty("status")]
        // public SQLDataResultStatus Status;
        public int status;

        [JsonProperty("message")]
        public string message;

        [JsonProperty("data")]
        public dynamic data;
    }

【问题讨论】:

  • 由于您的第一个 json 中的数据是一个数组,您是否尝试在其周围添加方括号?
  • 是的。我已经尝试过,就像我说的那样 - 不使用 WITHOUT_ARRAY_WRAPPER 没问题,但是我的 .NET 应用程序出现异常,结果为空且 HTTP 500。

标签: .net sql-server json-query


【解决方案1】:

我不会尝试使用 WITHOUT_ARRAY_WRAPPER,而是将其保留在那里,然后通过 C# 获取第一个索引。像这样的:

var response = (await new SQLDataContext().StoredProcedureExecuteReaderAsync<List<SQLDataResult>>("SP_name", parameters))[0];

【讨论】:

    猜你喜欢
    • 2011-03-13
    • 1970-01-01
    • 2019-03-04
    • 1970-01-01
    • 1970-01-01
    • 2014-10-17
    • 1970-01-01
    • 2017-12-24
    • 2021-05-16
    相关资源
    最近更新 更多