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

使用字段(由对象或字符串组成的数组)解组json

赏阳嘉
2023-03-14
问题内容

在执行过程中,您将json解组为结构。问题是我有一个api,可能会在请求之间更改键值的类型。

例如,可能是内联对象的对象如下:

{
  "mykey": [
    {obj1}, 
    {obj2}
  ]
}

而且还可以通过键指向对象,如下所示:

{
  "mykey": [
    "/obj1/is/at/this/path", 
    "/obj2/is/at/this/other/path"
  ]
}

可以内联某些对象,但是可以从多个位置引用其他对象。

javascript或python中这不是问题。只需检查类型。

解组和解析这两个对象的惯用方式是什么?是反映的唯一方法吗?


问题答案:

您可以将此JSON解组为如下结构:

type Data struct {
    MyKey []interface{} `json:"mykey"`
}

如果JSON包含字符串,则将它们解码为数组中的字符串。如果JSON包含对象,它们将被解码为map[string]interface{}值。您可以使用类型开关来区分两者。像这样:

for i, v := range data.MyKey {
    switch x := v.(type) {
    case string:
        fmt.Println("Got a string: ", x)
    case map[string]interface{}:
        fmt.Printf("Got an object: %#v\n", x)
    }
}
您可以在此处 尝试使用此示例: http
//play.golang.org/p/PzwFI2FSav


 类似资料:
  • 我的程序有一个对象类。Person对象由一个String(这是一个人的名字)和一个6元素字符串数组组成。数组保存用户输入的值,以对6种不同的运动进行排名,从最优选到最不优选。 例如,名为的Person对象可以由一个设置为的字符串和一个数组组成,每个元素如下。(列出的第二项运动是鲍勃最喜欢的运动,最后一项是他最不喜欢的运动)。 可以使用以下代码创建该示例对象: 这里是Person类: 每次新用户输入

  • 问题内容: 我在解组一些我无法控制的Json时遇到麻烦。在一个字段中,有99%的时间是字符串,但偶尔是数组。 杰森如下: 错误:json:无法将数组解组为字符串类型的Go结构字段MyListItem.display_name 问题答案: 使用json.RawMessage捕获变化的字段。 使用json“-”名称对解码器隐藏字段。顶级JSON解码后,应用程序将填充此字段。 解组顶级JSON: 根据原

  • 问题内容: 我正试图解组该文件: 进入这个结构: 使用以下说明: 问题是在“ json-schema@0.2.3”中,我们有一个许可证数组而不是一个字符串,由于这个原因,我显然得到了 有没有一种方法可以自动处理可以是数组或字符串的字段? 谢谢 问题答案: 不幸的是,软件包没有提供真正的自动解决方案。 但是您可以将依赖项解组为a 而不是。只是一个,因此您可以根据第一个字节确定消息的类型。 例: 另一

  • 我有一个字符串,可以是两种形式之一: 或 其中<代码> {...}和< code>[...]是任何有效的JSON。我只对解析出字符串的JSON部分感兴趣,但是我不确定最好的方法是什么(特别是因为我不知道字符串将是两种形式中的哪一种)。这是我目前的方法: 这是有效的,但我忍不住觉得可以做得更好。我想可能是regex,但我在匹配子对象和数组时遇到了问题,而不是最外部的json对象或数组。有什么建议吗?

  • 错误中的SOAP WSDL URL是Spring Boot应用程序中的另一个web服务。试图理解为什么这会出现在错误中。 UnmarshalException:意外元素(URI:“”,local:“message”)。需要的元素是<{http://soap_wsdl_url}jaxb_pojo_name>

  • 给定一个对象或数组,我希望能够确定路径是否存在。 给定 - 示例 1 它应该返回true,因为可以在body.data.message中找到消息返回false。 给定示例2 它应该返回true,因为lastGreting可以在body.data.message.details.lastGreeting中找到,否则返回false。 另一个条件是当主体由数组组成时 给定示例3 它应该返回true,因为