如果对象返回为空字符串而不是空结构,如何解组 json 对象

2023-12-04

我收到一些 JSON 数据,但如果对象为空,它不会返回空结构,而是返回空 字符串代替,并且在解组时,它返回一个错误。

所以而不是数据{"key":{}} is {"key":""}},即使使用 omitempty 字段也不起作用

例子:https://play.golang.org/p/N1iuWBxuo1C

type Store struct {
    Title string `json:"title,omitempty"`
    Item  item   `json:"item,omitempty"`
}
type item struct {
    Price float32 `json:"price,omitempty"`
    Kind  string  `json:"kind,omitempty"`
}

func main() {
    var data1 Store
    json1 := []byte(`{"title":"hello world","item":{"price":45.2,"kind":"fruit"}}`)
    if err := json.Unmarshal(json1, &data1); err != nil {
        log.Println("1, err: ", err)
        return
    }
    log.Printf("data1: %+v\n", data1)
    var data2 Store
    json2 := []byte(`{"title":"hello world","item":{}}`)
    if err := json.Unmarshal(json2, &data2); err != nil {
        log.Println("2, err: ", err)
        return
    }
    log.Printf("data2: %+v\n", data2)
    var data3 Store
    json3 := []byte(`{"title":"hello world","item":""}`)
    if err := json.Unmarshal(json3, &data3); err != nil {
        log.Println("3, err: ", err)
        return
    }
    log.Printf("data3: %+v\n", data3)
}

你可以拥有你的item类型实现json.Unmarshaler界面。

func (i *item) UnmarshalJSON(data []byte) error {
    if string(data) == `""` {
        return nil
    }

    type tmp item
    return json.Unmarshal(data, (*tmp)(i))
}

https://play.golang.org/p/1TrD57XULo9

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

如果对象返回为空字符串而不是空结构,如何解组 json 对象 的相关文章

  • 无法解析请求正文

    我一直在尝试解决以下错误 但无法解决 下面是代码 HttpPost public async Task
  • 如何最大限度地减少 Go 中的垃圾收集?

    有时您可能想避免 最小化垃圾收集器 所以我想确定如何做到这一点 我认为下一个是正确的 在函数的开头声明变量 使用数组代替切片 还有吗 为了最大限度地减少 Go 中的垃圾收集 您必须最大限度地减少堆分配 为了最大限度地减少堆分配 您必须了解分
  • 如何退出执行延迟调用的 go 程序?

    我需要使用defer释放手动创建的分配C图书馆 但我还需要os Exit在某个时刻具有非 0 状态 棘手的部分是os Exit跳过任何延迟指令 package main import fmt import os func main defe
  • 从 JSON 创建 HighCharts-Column 类型

    我正在尝试使用以下格式的 json 数据创建列类型 highchart id 7 dateV 2015 11 16 count 10 id 6 dateV 2015 11 15 count 3 id 5 dateV 2015 11 14 c
  • 调试测试时从 local.setting.json 读取值

    在运行或调试测试时 我似乎无法从天蓝色函数中的该文件中读取任何内容 但是在本地调试整个应用程序时它工作得很好 任何人都可以解释为什么吗 IsEncrypted false Values xyz 123 var res Configurati
  • POST JSON 对象到 aws lambda

    如何通过 aws API 网关将 json 对象发布到 aws lambda 函数 p s 我的目标是用 python 编写 lambda 函数 然后将其发布到 aws SQS 提前致谢 我想到了 现在 我有一个 API 网关接受客户端发布
  • JSON 到数据表

    我正在尝试将 JSON 文本序列化为 DataTable 如下所示 List
  • 如何从 json 提取数据到 javascript highchart?

    这是我的 json 文件的一部分 数据包含这个无用的符号 0 index 23 indicator ClassC Time month 201611 ww 201648 test time 0 0 p 48 0 Product RB 1 i
  • Golang 处理数据库连接的“最佳实践”

    我有一个用 Go 编写的 Web 服务 目前我有一个全局包 我可以在任何地方导入它 其中包含与 MongoDB 的连接 通过 MGO 但我不得不说 这对我来说感觉非常恶心 在 Go 中维护与数据源的连接的最佳实践是什么 我来自 PHP 世界
  • Postgres 9.3 JSON 输出多维对象

    鉴于此查询 SELECT id as id attributes gt gt name as file name status from workflow events where schema customer and type FILE
  • jq:从嵌套对象中选择键的子集

    Input success true results a b c 鉴于我想保留所需的输出b success true results b 我尝试过的事情 jq del select results b not success true re
  • 这种日期时间格式有简单的转换吗?

    我正在使用 jQuery 从 JSON feed 中检索数据 并且作为 feed 的一部分 我获得了 datetime 属性 例如 2009 07 01 07 30 09 我想将此信息放入 javascript Date 对象中以方便使用
  • JSON 解析为 Java - Android 应用程序

    我需要在 Java Android 应用程序中解析 json 字符串的帮助 JSON 文件的文本 data columns location id name description latitude longitude error type
  • " 是 JSON 字符串

    我有一个 JSON 字符串 当使用 Model JsonData 在 ASP NET MVC 页面中显示时 它看起来像这样 id 123 text Consumer parent 当我在 JavaScript 代码中使用相同的 Model
  • RestSharp反序列化JSON内容(代表一个对象包含字节数组)错误

    Client端收到正式的JSON内容 Id 1 2 3 Size 56 但在反序列化字节数组时出现错误 1 下面的语句出现错误 IRestResponse
  • 如何在 json 文件上使用 jq 过滤器时限制缩进

    我的输入 JSON 文件是 name abc private true version 1 0 0 description UI dependencies xyz 9 11 abc 5 0 0 当我使用jq name xyz 输出将打印为
  • Mysql - 如何比较两个 Json 对象?

    将整个 MySql json 列与 json 对象进行比较的语法是什么 以下不起作用 select count criteria from my alerts where criteria industries 1 locations 1
  • 如何使用 glide golang 安装私有仓库

    我在用glide作为我的 golang 项目的包管理 我无法使用私有存储库glide get bezos gitlab com gomock 即使我提供了正确的凭据 它也会询问用户名和密码 但最终会抛出错误 请提出任何想法 这与glide或
  • 如何在 Laravel 5 中处理嵌套的 JSON 对象请求?

    我们在 Laravel 5 和 AngularJs Ionic 中运行此 Web 服务来处理 Web 当我们将请求从 Web 客户端 发送到 Web 服务 后端 时 我们传递了嵌套的 JSON 对象 我们在读取服务器端父对象下的所有子对象时
  • 将压缩的json数据存储在本地存储中

    我想将 JSON 数据存储在本地存储中 有时存储的数据可能超过 5MB 每个域的浏览器允许的最大阈值 无论如何 我可以压缩或压缩数据并将其存储在本地存储中吗 如果对大数据进行每个 JS 函数的压缩和解压 会增加多少延迟 我正在使用这个 js

随机推荐