解析显式数组

2024-01-19

我正在尝试解析来自服务器的此类响应:

[[1,"a","b",2,"000000",[[1,2,3],[1,2,3]],"x","y","z",[[1,2,3],[1,2,3]]]]

除了为这种类型的消息编写我自己的 hack'ish 解析器之外,还有一种我不知道的标准方法来解释它吗?


您的输入是JSON http://www.json.org/细绳。在 Go 中,您可以使用encoding/json https://golang.org/pkg/encoding/json/包来解码它。

通常,当事先知道 JSON 字符串的结构时,Gostruct可以构建对其进行建模的类型,然后您可以将其解组为该值struct type.

如果结构未知或发生变化,您可以将其解组为类型的值interface{}它可以是任何 JSON 数据的目标:

s := `[[1,"a","b",2,"000000",[[1,2,3],[1,2,3]],"x","y","z",[[1,2,3],[1,2,3]]]]`

var v interface{}
if err := json.Unmarshal([]byte(s), &v); err != nil {
    fmt.Println(err)
    return
}
fmt.Println(v)
fmt.Printf("%#v\n", v)

输出(尝试一下去游乐场 https://play.golang.org/p/Q5w0_qabwz):

[[1 a b 2 000000 [[1 2 3] [1 2 3]] x y z [[1 2 3] [1 2 3]]]]
[]interface {}{[]interface {}{1, "a", "b", 2, "000000", []interface {}{[]interface {}{1, 2, 3}, []interface {}{1, 2, 3}}, "x", "y", "z", []interface {}{[]interface {}{1, 2, 3}, []interface {}{1, 2, 3}}}}

正如您所看到的,结果是切片的切片,其中包含不同类型的元素(JSON 数字、字符串甚至更多切片)。

这是相同的输出,添加缩进以获得更好的感觉(使用 Go 的复合文字 https://golang.org/ref/spec#Composite_literals句法):

[]interface{}{
    []interface{}{
        1, "a", "b", 2, "000000",
        []interface{}{
            []interface{}{1, 2, 3},
            []interface{}{1, 2, 3}},
        "x", "y", "z",
        []interface{}{
            []interface{}{1, 2, 3},
            []interface{}{1, 2, 3},
        },
    },
}

当然这不是很方便,因为你必须使用类型断言 https://golang.org/ref/spec#Type_assertions从该类型的“通用”值中“提取”值interface{},例如提取前 2 个非数组值(还打印它们的类型以进行验证):

fmt.Printf("%T %[1]v\n", v.([]interface{})[0].([]interface{})[0])
fmt.Printf("%T %[1]v\n", v.([]interface{})[0].([]interface{})[1])

Output:

float64 1
string a

值得注意的是,Go 中的 JSON 数字被解组为 type 的值float64即使它们可以是整数(除非明确指定了另一种类型)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

解析显式数组 的相关文章

  • 通过链接导航多个对象而不重复

    我正在尝试浏览一堆带有其他对象链接的对象 我想从 id 1 开始并浏览每个对象 有些对象会循环回到之前的对象 所以我想确保每个对象只查看一次 否则我会陷入无限循环 我还希望能够通过链接导航来判断哪些对象无法访问 我认为导航顺序并不重要 这是
  • 在汇编中初始化字符串数组

    我想创建一个数据数组 在初始化数据部分保存 5 个字符串 每个字符串正好有 4 个字符 每个字符串都有一些初始数据 例如第一个字符串的 abcd 第二个字符串的 efgh 等等 无效的 0任何字符串都不需要字符 如何用汇编语言初始化字符串数
  • python - 如何使用for循环重新分配数组中的元素

    我有一个 numpy 浮点数组 我想使用 for 循环重新分配不同的值 但 PyCharm 表示未使用新的变量分配 如果我有 请说 for i in array i i 5 它会说 i 是一个未使用的变量 我究竟做错了什么 您需要为数组元素
  • 动态二维数组非连续内存C++

    假设我将二维数组的地址及其二维数组的行和列传递给函数 该函数会将二维数组的地址视为一维数组 例如 int Matrix 如果我执行下面的代码 int arr arr new int row for int i 0 i lt row i ar
  • json 具有自动完成功能?

    我在用Jquery 自动完成 http docs jquery com Plugins Autocomplete autocomplete url or dataoptions 我也在使用 formatItem 我希望输出是
  • 如果 Row1 = 值 1,则更新其他行

    我有一个小的 php 脚本 用于访问 mySql 数据库 我想在数据库中插入新记录之前查看该数字 值 1 是否等于数据库中的记录 这也在第 1 行 所以我想 查看传入的电话号码是否等于数据库中的电话号码 如果是这样 则必须保持电话号码相同的
  • 多维数组内的移动

    我有一个用表格显示的数组 如何使用用户输入进行移动 目前 0 被分配给每个数组 但我计划为该数组分配其他值 我的问题是 如何使用用户输入在数组内向上 向下 向右 向左移动和对角移动 Array 0 gt Array 0 gt 0 1 gt
  • BigQuery 如何获取 JSON 结构中的值的总和?

    我有以下查询 SELECT JSON EXTRACT json Weights as weight from select Weights blue 1 0 purple 0 0 yellow 1 0 green 1 0 as json 返
  • array_merge 更改键

    我得到以下数组 arr array 6 gt Somedata 7 gt Somedata1 8 gt Somedata2 问题是 当我使用array merge array Select the data arr 它确实将数组键更改为 A
  • 从给定的项目列表创建子列表

    我首先要说的是以下问题不是为了家庭作业目的即使因为我几个月前就完成了软件工程师的工作 无论如何 今天我正在工作 一位朋友向我询问了这个奇怪的排序问题 我有一个包含 1000 行的列表 每行代表一个数字 我想创建 10 个子列表 每个子列表都
  • 如何在 JavaScript 中对关联数组进行排序?

    我需要为我的一个项目通过 JS 对关联数组进行排序 我发现这个函数在 Firefox 中运行得很好 但不幸的是它在 IE8 OPERA CHROME 中不起作用 无法找到使其在其他浏览器中运行的方法 或者找到另一个适合该目的的函数 我真的很
  • JavaScript 中最长的通用前缀

    我正在尝试解决 Leet Code 挑战14 最长公共前缀 https leetcode com problems longest common prefix 编写一个函数来查找字符串数组中最长的公共前缀字符串 如果没有公共前缀 则返回空字
  • 在Unity游戏中保存数据的最佳方法[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想知道 在 Unity 游戏中保存数据的最佳方式是什么 JSON 如果是这样 怎么办 谢谢 以下是一些不同的方式和方法保存 Unit
  • 在 Django 模板中通过键访问字典

    我正在将字典从我的视图传递到模板 所以 key1 value1 key2 value2 传入并循环键 值对很好 但是我还没有找到从特定键直接在视图中访问的优雅解决方案 例如 key1 例如 bu json items key1 我可以使用一
  • 在 VB.Net 中将字节数组转换为整数

    我想知道在 vb net 中将字节数组 长度 4 转换为整数的最佳方法是什么 我知道 BitConverter 但执行函数调用来执行应该可以通过复制 4 字节内存来完成的操作似乎相当浪费 同样 将单 双精度数从二进制表示形式转换为单 双精度
  • 解析“流”JSON

    我在浏览器中有一个网格 我想通过 JSON 将数据行发送到网格 但浏览器应该在接收到 JSON 时不断解析它 并在解析时将行添加到网格中 换句话说 在接收到整个 JSON 对象后 不应将行全部添加到网格中 应该在接收到行时将其添加到网格中
  • 使用 KnockoutJs 映射插件进行递归模板化

    我正在尝试使用以下方法在树上进行递归模板化ko映射 插入 http knockoutjs com documentation plugins mapping html 但我无法渲染它 除非我定义separate每个级别的模板 在以下情况下
  • 使用 Ajax 请求作为源数据的 Jquery 自动完成搜索

    我想做的事 我想使用 jquery 自动完成函数创建一个输入文本字段 该函数从跨域curl 请求获取源数据 结果应该与此示例完全相同 CSS 在这里并不重要 http abload de img jquerydblf5 png http a
  • 对具有混合类型值的数组进行数字排序

    我有一个像这样的混合数组 fruits array lemon Lemon 20 banana apple 121 40 50 然后申请sort 其功能如下 sort fruits SORT NUMERIC foreach fruits a
  • 使用 powershell 将 XML 转换为特定的 JSON 结构

    需要有关将 xml 转换为特定 json 结构的帮助 XML 看起来像这样

随机推荐

  • 使 ASP.net GridView 中的列可编辑

    我有一个 GridView 其中一列用于字段的显示顺序 这些字段将显示在我的网站的前端 与其进入编辑页面中的每条记录并必须以这种方式更改顺序 不如单击一个按钮并使整个 DisplayOrder int 可编辑 从而使生活变得更加轻松 如何才
  • 如何使用 jq 将 json 文档中的空值替换为特定值?

    我有一个 json 文件 其中包含nulls 作为某些键的值 我想将其替换为某些特定值 鉴于此输入 id null rows panels title Panel1 datasource null title Panel2 datasour
  • git:致命:我不处理协议“​​http”

    我从网页复制并粘贴了 git clone 命令 https fedorahosted org ibus typing booster https fedorahosted org ibus typing booster 我懂了 user h
  • 联合公共初始序列与原语

    我试图更好地理解关于联合和共同初始序列规则的一个相当令人惊讶的发现 常见的初始序列规则表示 class mem 23 在具有结构类型 T1 的活动成员的标准布局联合中 允许读取结构类型 T2 的另一个联合成员的非静态数据成员 m 前提是 m
  • 使用环境变量运行 Helm Chart 时出错

    我正在创建一个舵图 https helm sh docs v3 用于 Kubernetes 部署 在deployment yaml中我定义了一些环境变量 spec env name GRAPHITE ENABLED value Values
  • Android 中的包管理器

    我正在尝试了解AndroidPackageManager 功能和用途 以及冰淇淋三明治的新改进PackageManager超过以前的版本 我已经看到了以下链接和一些旧线程 但如果有人能为我提供更多参考资料或解释 我仍然会很感激 因为互联网上
  • Android SearchView onclick

    我有一个 searchView 如下所示 private void setupSearchView mSearchView SearchView getActivity findViewById R id search view neue
  • 尝试通过 Intellij IDEA 部署 tomcat 服务器并收到奇怪的丢失 server.xml 错误

    我将从收到的错误开始 然后解释到目前为止我所做的事情 Error running Guestbook Cannot load home anthony IntelliJIdea11 system tomcat Unnamed guestbo
  • 如何禁用文本区域?

    如何禁用动态添加到 HTML 的文本区域 HTML div class ss datesel inp cont div class ss datesel inp right corner div div
  • 仅从 .tex 格式的 arXiv 文章中提取正文文本

    我的数据集由 arXiv 天体物理学文章组成 tex 文件 我只需要从文章正文中提取文本 而不是从文章的任何其他部分 例如表格 图形 摘要 标题 脚注 致谢 引文等 我一直在尝试使用Python3tex2py https drive goo
  • 货币格式

    这应该是一个简单的问题 但是 我需要格式化货币以在 C 中显示 字符串 所涉及的货币有其自己的规则 例如要使用的符号以及该符号是否应该出现在值之前 例如 10 或之后 例如 10 即越南盾 但数字的格式取决于用户所在地区 而不是货币 E g
  • 使用 C# 在一行中读取两个整数

    我知道如何让控制台读取两个整数 但每个整数本身就像这样 int a int Parse Console ReadLine int b int Parse Console ReadLine 如果我输入两个数字 即 1 2 则值 1 2 无法解
  • 关于对齐存储和普通可复制/可破坏类型

    我与一个比我聪明的人进行了一次有趣的讨论 并且我仍然对对齐存储和简单可复制 可破坏类型有一个悬而未决的问题 考虑以下示例 include
  • 致命错误:内存不足,但我有足够的内存(PHP)

    由于我的问题越来越长 我决定重写整个问题 使其更好 更短 我在 8GB 内存的专用服务器上运行我的网站 我完全意识到我需要提高 php ini 设置的内存限制 我已将其从 128M 设置为 256M 然后设置为 1 但问题仍然在于坚持 致命
  • Java Pattern.matcher() 在匹配包含 \n 的行时冻结

    我遇到了一个我觉得很有趣的问题 我主要通过正则表达式对文本文件进行一些基本解析 并且在匹配此行时它总是冻结 ftrect 0 7031 57 0313 9 8561 55 5313 FREIGABE nQ09 SV01 没有抛出异常 程序只
  • mysql(几乎)完成审计

    我正在寻找一种为我的表制作简单事件日志的方法 我有几个表可以由不同的用户更改 我想跟踪 who made the change when what was before update what is the new value which
  • 将 HTTP 请求映射到 HTTP 响应

    如果我向同一服务器发出多个 HTTP Get 请求 并且每个请求都获得 HTTP 200 OK 响应 我如何使用 Wireshark 判断哪个请求映射到哪个响应 目前看起来好像发出了一个 http 请求 并且很快收到了下一个 HTTP 20
  • PDO 函数 setFetchMode

    你好 我试图用 PDO 来实现函数 但出现错误 PDO 新手 这是我的代码 function mail id mail global host dbname user pass DBH new PDO mysql host host dbn
  • 通过 Bower 安装 jQuery-Mobile

    在我的项目中 我想通过 Bower 使用 jquery mobile 在我可以使用它之前我必须运行npm install and grunt随后在bower components jquery mobile在我可以使用缩小版之前 js an
  • 解析显式数组

    我正在尝试解析来自服务器的此类响应 1 a b 2 000000 1 2 3 1 2 3 x y z 1 2 3 1 2 3 除了为这种类型的消息编写我自己的 hack ish 解析器之外 还有一种我不知道的标准方法来解释它吗 您的输入是J