【问题标题】:Can't parse json into JArray object after using JSON_ARRAY and JSON_OBJECT in mysql在 mysql 中使用 JSON_ARRAY 和 JSON_OBJECT 后无法将 json 解析为 JArray 对象
【发布时间】:2021-02-11 21:44:35
【问题描述】:

我正在查询一个 mySQL (MariaDB) 数据库并使用 JSON_ARRAY 和 JSON_OBJECT 将 json 对象收集为数组。

我有一个 API 可以使用 GetAsync 从数据库中检索数据。

之后,在api消费者中,我想将Json解析成一个对象, 使用 JArray (Newtonsoft)。

由于 JSON_OBJECT 中的问题,我无法解析 Json(这似乎是包含数组符号“[”的引号)。请参阅下面的错误代码。

我做错了什么,我该如何解决?

当从另一个数据源(不使用 JSON_ARRAY 和 JSON_OBJECT)获取另一个 Json 时,解析正在工作(参见下面的示例)

这是我的代码:

public JARrray parse(HttpResponseMessage response)
{
    return JArray.Parse(response.Content.ReadAsStringAsync().Result); 
}

这是有效的字符串

[
    {
        "remark":"",
        "driver": [
            {
                "username":"0000000",
                "uid":"00000000",
                "fname": "000000",
                "lname": ""
            }
        ]
    }
]

这是获取消息的字符串

解析一个值后,遇到了一个意外字符:u。路径'[0].driver',行..."

我可以在堆栈中看到在线上正在发生这种情况:

JsonTextReader.ParsePostValue(Boolean ignoreComments):

json:

[
    {
        "remark":"",
        "driver": "[{\"username\": \"0000000\", \"uid\": \"00000000\", \"fname\":\"ZZZZZ\", \"lname\":\"\"}]"
    }
]

甚至,当我删除“”时:

[
    {
        "remark":"",
        "driver": "[{"username": "0000000", "uid": "00000000", "fname":"ZZZZZ", "lname":""}]"
    }
]

【问题讨论】:

  • 您说您正在从数据库中获取数据,但在您的解析方法中您使用的是HttpResponseMessage。同样在您的第一个 json 结构中,driver 是一个数组,而在您的第二个块中,它是一个包含 json 编码数组的字符串。
  • @derpirscher - 我有一个 API 创建器,它生成一个 api,我得到一个字符串的响应(与其他数据源一起使用)。至于您对包含 json 编码数组的驱动程序字符串的评论-您是对的!我该如何管理\修复它?
  • 解决此问题的唯一正确方法是在数据库中正确存储和检索数据,并在您的 API 创建器中正确处理。

标签: c# mysql json json.net


【解决方案1】:
\"fname\":"\ZZZZZ\"

ZZZZZ前面的转义双引号是错误的。将其从 "\ 更改为 \"

【讨论】:

  • 这是一个拼写错误 - 复制时(徒手)。我会解决的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-31
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-01
相关资源
最近更新 更多