当前位置: 首页 > 面试题库 >

解码json,包括json编码的字符串

申屠飞
2023-03-14
问题内容

大家好,我是从外部Api获取websocket信息的,它以这种方式给了我json响应:

 `{"name":"message","args":["{\"method\":\"chatMsg\",\"params\":{\"channel\":\"channel\",\"name\":\"name\",\"nameColor\":\"B5B11E\",\"text\":\"<a href=\\\"https://play.spotify.com/browse\\\" target=\\\"_blank\\\">https://play.spotify.com/browse</a>\",\"time\":1455397119}}"]}`

我把它放在这个结构中

type main struct {

Name string `json:"name"`
Args []arg  `json:"args"`
}

type arg struct {
    Method string`json:"method"`
    Params par `json:"params"`
}
type par struct {
    Channel     string `json:"channel,omitempty"`
    Name        string `json:"name,omitempty"`
    NameColor   string `json:"nameColor,omitempty"`
    Text        string `json:"text,omitempty"`
    Time        int64  `json:"time,omitempty"`
}

并用代码解码

sReplace := strings.NewReplacer(`"{`, "{", `"]`, "]", "\\", ``)
strN := sReplace.Replace(str)
r := strings.NewReader(strN)
d := json.NewDecoder(r)
m := main{}

我遇到错误

invalid character 'h' after object key:value pair

我知道该错误是文本字段值的结果。有什么好的方法可以清理它或告诉解码器忽略文本字段的内容吗?


问题答案:

该应用程序正在解析包含substring的数据"text":"<a href="https。这是无效的JSON。错误消息抱怨hin href

由于JSON值包含编码的JSON值,因此应用程序必须分两个步骤进行解码:

type main struct {
  Name string   `json:"name"`
  Args []string `json:"args"`
}

type arg struct {
  Method string `json:"method"`
  Params par    `json:"params"`
}
type par struct {
  Channel   string `json:"channel,omitempty"`
  Name      string `json:"name,omitempty"`
  NameColor string `json:"nameColor,omitempty"`
  Text      string `json:"text,omitempty"`
  Time      int64  `json:"time,omitempty"`
}

str := `{"name":"message","args":["{\"method\":\"chatMsg\",\"params\":{\"channel\":\"channel\",\"name\":\"name\",\"nameColor\":\"B5B11E\",\"text\":\"<a href=\\\"https://play.spotify.com/browse\\\" target=\\\"_blank\\\">https://play.spotify.com/browse</a>\",\"time\":1455397119}}"]}`
var m main
if err := json.Unmarshal([]byte(str), &m); err != nil {
    log.Fatal(err)
}
var args arg
if err := json.Unmarshal([]byte(m.Args[0]), &args); err != nil {
    log.Fatal(err)
}

游乐场的例子



 类似资料:
  • 问题内容: 我有一些json,我需要解码,更改然后编码,而不会弄乱任何字符。 如果我在json字符串中包含unicode字符,它将无法解码。我不知道为什么,因为json.org说一个字符串可以包含:。但这在python中也不起作用。 我可以使用utf8_encode,该字符串将允许使用json_decode对字符串进行解码,但是字符会被压缩成其他形式。这是来自结果数组的print_r的结果。两个字

  • 本文向大家介绍PHP 编码JSON字符串,包括了PHP 编码JSON字符串的使用技巧和注意事项,需要的朋友参考一下 示例 该json_encode函数会将一个PHP数组(或者,从PHP 5.4开始,一个实现该JsonSerializable接口的对象)转换为JSON编码的字符串。如果成功,则返回JSON编码的字符串;如果失败,则返回FALSE。 在编码期间,PHP数据类型string,intege

  • 在上一章,已经讲过在 codec 中使用 JSON 编码。但是,有些日志可能是一种复合的数据结构,其中只是一部分记录是 JSON 格式的。这时候,我们依然需要在 filter 阶段,单独启用 JSON 解码插件。 配置示例 filter { json { source => "message" target => "jsoncontent" } }

  • 问题内容: 我对使用Java中的json-simple库是陌生的,并且已经经历了编码和解码示例。复制编码示例很好,但是我无法使解码示例与混合类型JSON一起使用。 我的问题之一是库中有太多类,这些类没有正确记录,因此我没有源(以便能够通读并理解它们的目的)。因此,我努力了解如何使用许多此类。 阅读此示例后: 从json-simple官方解码教程中,我尝试解码此JSON: 我正在编写以下代码进行解码

  • 问题内容: 大家!我可以请您帮我解码以下JSON代码: 我想将上述结构组织为: 注1: 文件夹:收件箱 来自(来自):… 日期(日期):… 时间(时间):… utcOffsetSeconds:… 收件人(地址):… 收件人(姓名):… 状态(deliveryStatus):… 文字(正文):… 笔记2: … 先感谢您! 问题答案: 您可以使用该函数来解码JSON字符串: 而且您会得到像这样的东西:

  • 这可能很容易,但我真的可以在这里使用Ajax和JSON方面更聪明的人来帮助我。我有一个Javascript函数将Ajax请求传递给PHP后端。我将传递一个javascript对象作为“request\u parameters”post变量。当它出现在PHP上时,我可以导航它,但是对象结构已经被数组所取代。相反,我希望对象结构保持完整,因此作为足够聪明的危险类型,我决定对对象进行JSON编码: 相对