当前位置: 首页 > 知识库问答 >
问题:

解码未知结构的JSON

司徒杜吟
2023-03-14

我想得到一个表示 json 的字符串,如下所示:

{ "votes": { "option_A": "3" } }

并在其中包含一个“count”键,因此结尾如下:

{ "votes": { "option_A": "3" }, "count": "1" }

这就是为什么我计划将其转换为 json,以便我可以添加计数,然后再次使其成为字符串。问题是我不知道该 JSON 的结构,所以我无法使用 json。解编(在,


共有2个答案

陈松
2023-03-14

您真的只需要一个结构,正如评论中提到的,字段上的正确注释将产生所需的结果。JSON不是一些极其变异的数据格式,它定义良好,任何json片段,无论它对您来说有多复杂和混乱,都可以相当容易地以100%的准确率通过模式和Go和大多数其他OO编程语言中的对象来表示。这是一个例子;

package main

import (
    "fmt"
    "encoding/json"
)

type Data struct {
    Votes *Votes `json:"votes"`
    Count string `json:"count,omitempty"`
}

type Votes struct {
    OptionA string `json:"option_A"`
}

func main() {
    s := `{ "votes": { "option_A": "3" } }`
    data := &Data{
        Votes: &Votes{},
    }
    err := json.Unmarshal([]byte(s), data)
    fmt.Println(err)
    fmt.Println(data.Votes)
    s2, _ := json.Marshal(data)
    fmt.Println(string(s2))
    data.Count = "2"
    s3, _ := json.Marshal(data)
    fmt.Println(string(s3))
}

https://play.golang.org/p/ScuxESTW5i

根据您最近的评论,您可以通过使用接口{}来表示除计数之外的数据,使计数成为字符串,并将其余的blob推入interface{}来解决这个问题,该接口基本上可以接受任何内容。也就是说,Go是一种静态类型语言,有一个相当严格的类型系统,重申一下,你所说的“它可以是任何东西”是不正确的。JSON不能是任何东西。对于任何一段JSON,都有模式,一个模式可以定义JSON的许多变体。我建议你花点时间来理解数据的结构,而不是把数据拼凑在一起,因为在绝对可以定义的情况下,数据是无法定义的,而且对于知道自己在做什么的人来说,这可能很容易。

哈朗
2023-03-14
package main

import "encoding/json"

func main() {
    in := []byte(`{ "votes": { "option_A": "3" } }`)
    var raw map[string]interface{}
    if err := json.Unmarshal(in, &raw); err != nil {
        panic(err)
    }
    raw["count"] = 1
    out, err := json.Marshal(raw)
    if err != nil {
        panic(err)
    }
    println(string(out))
}

https://play.golang.org/p/o8ZwvgsQmoO

 类似资料:
  • 我有一个YAML文件,我转换成JSON,然后使用GSONJava对象。这将被用作标准定义,我将与其他YAML文件进行比较。我将要验证的YAML文件应该包含与我的定义具有相同结构的字段。然而,它很有可能包含具有不同结构的字段,以及在我的定义中不存在的字段,因为最终由用户在我接收文件之前创建这些字段。要验证的YAML中的字段可以是这样的,可以选择用户希望定义的嵌套级别。 目前,我收到这个YAML文件,

  • 简短版本: 我希望能够将结构转换为元组。至少是那种类型。在下面的代码中,convertToTuple函数不起作用,因为可变参数不能用于结构化绑定(据我所知)。关键是:自动 基本上,我需要的是一种将自定义结构的类型转换为元组的方法,元组包含结构中的所有类型。例如: 具体问题: 我想创建一个模板函数,它将一个类型或一个类型列表作为模板参数,并生成一个纹理列表,每个纹理包含一个项目。另一个函数可以对纹理

  • 问题内容: 是否有人对未知结构的NSDictionary进行了递归有序遍历?我想学习任何NSDictionary,并按层次结构顺序处理每个级别。 1)此数据来自经过验证的JSON。可以肯定地说,从诸如SBJSON(JSON框架)之类的框架创建的NSDictionary仅会导致嵌套字典,数组和任意叶的组合吗? 2)如何使用适用于数组和字典的快速枚举完成泛型遍历?使用下面的代码,一旦我到达数组中的字典

  • 本文向大家介绍详解Python的循环结构知识点,包括了详解Python的循环结构知识点的使用技巧和注意事项,需要的朋友参考一下 循环结构的应用场景 如果在程序中我们需要重复的执行某条或某些指令,例如用程序控制机器人踢足球,如果机器人持球而且还没有进入射门范围,那么我们就要一直发出让机器人向球门方向奔跑的指令。当然你可能已经注意到了,刚才的描述中其实不仅仅有需要重复的动作,还有我们上一个章节讲到的分

  • 问题内容: 我正在尝试在Go中解码一些json,但某些字段不会被解码。在此处查看在浏览器中运行的代码: 我究竟做错了什么? 我只需要MX记录,所以没有定义其他字段。据我从godoc了解到,您不需要定义不需要/不需要的字段。 问题答案: 按照有关json.Unmarshal的go documentaiton 所述,您只能对导出的字段进行解码,主要原因是外部软件包(例如)无法访问未导出的字段。 如果您

  • 问题内容: 我正在尝试遵循此示例Hyperledger Fabric代码:https : //github.com/hyperledger/education/tree/master/LFS171x/fabric- material 最初,我用go文件chaincode / tuna-app / test.go替换了chaincode / tuna-app / tuna- chaincode.go