使用 Go 解析带有尾随逗号的 JSON 数组和映射元素时出现运行时错误

2023-11-21

Go 领域的主要主题专家之一 Dave Cheney 写道:“当使用复合文字初始化变量时,Go 要求复合文字的每一行都以逗号结尾,甚至是声明的最后一行。这就是结果分号规则."

然而,当我尝试将这个美丽的规则应用于 JSON 文本时,解析器似乎并不同意这种理念。在下面的代码中,删除逗号是有效的。是否有解决方案,以便当我在差异中添加元素时只能看到一行更改?

package main

import (
    "fmt"
    "encoding/json"
)

type jsonobject struct {
    Objects []ObjectType `json:"objects"`
}

type ObjectType struct {
    Name string `json:"name"`
}

func main() {
    bytes := []byte(`{ "objects": 
        [ 
            {"name": "foo"}, // REMOVE THE COMMA TO MAKE THE CODE WORK!
        ]}`)
    jsontype := &jsonobject{}
    json.Unmarshal(bytes, &jsontype)
    fmt.Printf("Results: %v\n", jsontype.Objects[0].Name) // panic: runtime error: index out of range
}

那没有。这JSON规范不允许尾随逗号。

这不是有效的 JSON:

{ "objects": 
    [ 
        {"name": "foo"},
]}

这是 Go 语法,如果枚举未在行上关闭,则需要使用逗号 (更多关于这个), e.g.:

// Slice literal:
s := []int {
    1,
    2,
}

// Function call:
fmt.Println(
    "Slice:",
    s,
)

即使您可以“说服”一个特定的 JSON 解析器默默地吞下它,其他有效的 JSON 解析器也会正确地报告错误。不要这样做。

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

使用 Go 解析带有尾随逗号的 JSON 数组和映射元素时出现运行时错误 的相关文章

  • 在 Go 中解析 RFC-3339 / ISO-8601 日期时间字符串

    我尝试解析日期字符串 2014 09 12T11 45 26 371Z 在围棋中 该时间格式定义为 RFC 3339 日期时间 https datatracker ietf org doc html rfc3339 section 5 6
  • Flot 0.8.2 折线图 - 颜色错误

    我正在使用 Flot 折线图并设置它们的颜色 我发现了一个奇怪的错误 在前 3 种颜色之后 绘图对所有其他线条使用最后一种颜色 这不是正确的行为 更有趣的是图例显示了正确的颜色 这是一个已知的错误 var dataSet label d1
  • 完整日历 - 向事件对象添加额外属性

    可能是由于我缺乏理解 但我使用 PHP 返回 JSON 字符串来带回事件数据
  • 将 swift 结构体转换为 json 字符串

    我正在尝试将我的 swift 结构转换为 json 格式 类似这样的问题似乎有不少 但到目前为止 没有一个解决方案对我有用 这是我的结构 struct Rec Codable var name String var time Int var
  • api网关CORS设置

    我正在尝试在部署脚本中使用 aws cli 从命令行设置 aws CORS 我使用以下 perl to shell 命令创建了 POST 资源 我正在尝试将集成响应设置为 就像启用核心一样 aws apigateway put method
  • Spark运行错误java.lang.NoClassDefFoundError: org/codehaus/jackson/annotate/JsonClass

    import org apache spark SparkContext import org apache spark SparkConf import play api libs json import java util Date i
  • 将 JSON 字符串传递给 Django 模板

    我一直在用头撞墙 试图找出为什么我无法将从 Django 模型生成的 JSON 字符串传递到模板的 javascript 静态文件中 事实证明 问题不在模型级别 使用serializers serialize 在脚本本身中放入相同的字符串将
  • 在 Go 中读取请求负载?

    我正在使用文件上传器 需要请求负载中的详细信息来裁剪它 func Upload w http ResponseWriter r http Request reader err r MultipartReader if err nil htt
  • 替换 WCF 默认 JSON 序列化

    是否可以替换 WCF 的默认 JSON 序列化 我目前正在使用webHttp行为 并通过application json作为 MIME 类型 特别是 我不喜欢默认情况下每个属性都是键 值对 例如 Key PropertyName Value
  • JSON 编码和大引号

    我在 PHP 5 的本机实现中遇到了一个有趣的行为json encode 显然 当将对象序列化为 json 字符串时 编码器将清空包含 卷曲 引号的字符串的任何属性 这种类型可能会在启用自动转换的情况下从 MS Word 文档中复制粘贴 这
  • golang sql 驱动程序的准备语句

    关于golang的sql driver 下面两条语句有什么区别 store DB is sql DB type rows err store DB Query SQL args err nil defer rows Close and st
  • 如何使用 golang 和 mgo 库在 mongodb 中创建文本索引?

    我正在尝试对集合进行全文搜索 但为了做到这一点 我需要创建一个文本索引 http docs mongodb org manual tutorial create text index on multiple fields http docs
  • Bash脚本无法执行Go命令

    我正在尝试编写一个 bash 脚本来自动在不同的目录中运行 go get install 相关部分在这里 cd web go get cd web go install cd services go get cd services go i
  • “JSON”附近的语法不正确 - SQL Server 2016

    所以我最近安装了SQL Server 2016 CTP3主要是为了JSON输出功能 我正在尝试在我的 SQL 查询中使用它 就像 MSDN 上下面的链接中显示的那样 关键字 JSON 不会变成蓝色并给出错误 JSON 附近的语法不正确 可能
  • 如何将具有固定模式的值数组反序列化为强类型数据类?

    我在找出一种干净的 尽可能 方法来以特定格式反序列化某些 JSON 数据时遇到了一些麻烦 我想将数据反序列化为强类型数据对象类 对于具体细节非常灵活 以下是数据的示例 timestamp 1473730993 total players 9
  • 使用 vue.js 显示 json 结果

    您好 我尝试使用 vue js 显示 json 文件结果 目标是结果将显示在值上 这是我的代码 data return fetchData function var self this self http get api casetotal
  • 在python中合并两个json对象

    我正在 python 中合并两个 json 我正在做 import json json obj json dumps a 1 2 json obj1 json dumps a 3 4 json obj json obj1 print jso
  • 来自 Pandas DataFrame 的用户定义的 Json 格式

    我有一个 pandas dataFrame 打印 pandas DataFrame 后 结果如下所示 country branch no of employee total salary count DOB count email x a
  • JSONP 回调失败,需要 javascript/jquery 帮助

    我是 json 的菜鸟 了解一点 jquery 并尝试让一个小脚本工作 我想检索某个纬度 经度的时间 并根据我在网上阅读的内容编写了这个脚本 getJSON http ws geonames org timezoneJSON lat 47
  • runtime.LockOSThread 是否允许子 goroutine 在同一个操作系统线程中运行?

    我明白在 Go 中 runtime LockOSThread https golang org pkg runtime LockOSThread将一个 goroutine 绑定到一个操作系统线程 并且不允许其他 goroutine 在该线程

随机推荐

  • CocoaPods 找不到 pod“GTMSessionFetcher/Core”的兼容版本

    我正在制作一个 React Native 移动应用程序 并希望合并 Firebase 和 Firebase 身份验证 但是 当我运行 pod install 或 pod update 时 我遇到此错误 我做了一些研究 发现这个问题还没有被谷
  • Cocos2d-x android无法解析cocos2dx库

    我从 macOS xcode 4 5 开始 我尝试过教程 使用cocos2dx完成macOSX的构建 问题发生在android源中 没有描述cocos2dxActivity的内容 所以 org cocos2dx lib不是其他文件 安卓没有
  • 扩展高度以包含绝对定位的儿童

    我正在为 CMS 构建 html javascript 主题设计器 元素是绝对定位的 可以通过鼠标移动 调整大小 和 或包含可编辑文本 其高度可以由行数确定 然而 我遇到了一个问题 即父元素的高度不会扩展以包含其绝对定位的子元素 最少的代码
  • 更改摩卡的默认超时

    如果我们有一个单元测试文件 my spec js 并使用 mocha 运行 mocha my spec js 默认超时为 2000 毫秒 可以使用命令行参数覆盖它以进行部分测试 mocha my spec js timeout 5000 是
  • 如何使用 Azure Blob 存储 SDK 将 Blob 从一个容器复制到另一个容器

    我一直在参考文档https learn microsoft com en us azure storage blobs storage quickstart blobs python 我无法找到将文件从一个容器复制 移动到另一个容器的正确
  • Swift 进度指示器图像蒙版

    首先 该项目是使用 Swift 构建的 我想创建一个自定义进度指示器 在脚本运行时 填满 该脚本将调用从远程服务器拉取的 JSON 提要 为了更好地形象化我所追求的 我做了这个 我的猜测是有两个 PNG 图像 一白一红 然后根据进度量简单地
  • 计算值用 R 改变符号的次数

    我对 R 还很陌生 但我对它很感兴趣 因为我发现它很容易使用 尽管我不是程序员 我试图解决以下问题 我需要计算列中值更改符号的次数 然后按路径对结果进行排序 下面是表格的示例 路径是一个因素 一旦我最终得到数据 我就可以计算出如何对数据进行
  • 在 Spring 应用程序的事务中使用 Async

    我有一个 Spring 应用程序 它使用以下命令更新 MySQL DB 中的特定实体详细信息 Transactional方法 并且在同一方法中 我尝试使用调用另一个端点 Async这是另一个 Spring 应用程序 它从 MySql DB
  • 如何使用ArrayList的get()方法

    我是 java 新手 也是 OOP 新手 我正在尝试了解 ArrayList 类 但我不明白如何使用 get 我尝试在网上搜索 但找不到任何有用的东西 这是官方文档ArrayList get 无论如何 这很简单 例如 ArrayList l
  • 加载图像时显示加载图标

    我想在 a 中显示背景图像 加载微调器div这将在其中加载图像 图像将在完全加载后显示 执行如下操作 div style background image none div 演示 jQuery 中 我如何使用 Angular2 Ionic2
  • 如何在 VBA 应用程序中隐藏代码

    Is it possible to hide VBA code normally accessible from Excel s VBA Editor Alt F11 from a user s prying eyes Can I for
  • 将数字四舍五入到前 3 位数字(以数字 != 0 开头)

    是否有一个预定义的格式函数可以将数字四舍五入到前 3 位数字 开头应该是数字 0 0 02528498 to 0 0253 1 857403 to 1 86 2060943 to 2060000 0 00006513832 to 0 000
  • 未加密的 SSL 协议?

    是否可以通过未加密的 https 发送消息 例如 要求进行证书验证和授权 但不加密通过套接字发送的实际数据 是的 TLS 和 SSL 支持 无加密 模式 所讨论的特定客户端和服务器是否配置为启用是一个单独的问题 服务器有可能默认启用这些密码
  • 将函数应用于 Spark DataFrame 的每一行

    我使用的是 Spark 1 3 我想对数据框的每一行应用一个函数 该函数对行的每一列进行哈希处理并返回哈希值列表 dataframe map row gt row toSeq map col gt col hashCode 当我运行此代码时
  • Visual Studio:重新启用“构建失败,运行上次成功?”对话框

    当构建失败时 VS 会弹出一个选项来运行上次成功的构建 有人在我的机器上单击了 是 和 不再显示此对话框 现在我仍坚持该设置 我怎样才能重置它 流程如下Visual Studio 2010及以上 但与以前的版本应该类似 在菜单栏上转到 To
  • 使用 Update 且 Upsert 为 true 时未设置默认值

    我为用户提供以下模型 var UserSchema new mongoose Schema name String dob Date sex String photo String email type String index uniqu
  • boost::interprocess::shared_ptr 线程安全(和进程间安全)吗?

    我想在线程之间共享数据 并在最后一个用户使用完数据后自动删除数据 大多数时候 这似乎有效 使用boost interprocess shared ptr in a boost fixed managed shared memory段 但并非
  • 使用@Preauthorize和@@ControllerAdvice自定义错误消息

    我们正在使用 spring 和 spring security 3 2 最近我们正在向 RestAPI 添加注释 PreAuthorize 之前它是基于 URL 的 PreAuthorize hasPermission salesorder
  • 将 getdate() 转换为 int

    当我运行以下查询时 select convert int getdate 我得到结果 41238 1 row s affected 有谁知道这是什么意思 这是我想的天数1 1 1900 sql server 保留从那时起的天数 尝试将该数字
  • 使用 Go 解析带有尾随逗号的 JSON 数组和映射元素时出现运行时错误

    Go 领域的主要主题专家之一 Dave Cheney 写道 当使用复合文字初始化变量时 Go 要求复合文字的每一行都以逗号结尾 甚至是声明的最后一行 这就是结果分号规则 然而 当我尝试将这个美丽的规则应用于 JSON 文本时 解析器似乎并不