json按照key排序c语言实现,Json中的key类型

2023-11-16

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。 它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。 这些特性使JSON成为理想的数据交换语言。

Json是开发中特别常用的数据格式,大家应该对它非常的熟悉了,现在有个问题:

Json的key可以是数字么?

解释

json是javascript的子集,在javascript中,只能使用字符串作为对象的key,看一下示例:

let a = {1: 1, true: true};

console.log(a[1]); // 1

console.log(a["1"]); // 1

console.log(Object.keys(a)); // ["1", "true"]

console.log(JSON.stringify(a)); // "{"1":1,"true":true}"

第4行代码能够直接说明对象的key被转换为了字符串,而第5行转化为json中,key也都被转化为字符串。

json是跨语言的,我们来看下Java版本:

public class JsonTest {

public static void main(String[] args) {

Map map = new HashMap<>();

map.put(1, "a");

map.put(2, "b");

map.put(true, "c");

String json = JSON.toJSONString(map);

System.out.println(json); // {1:"a",2:"b",true:"c"}

// 使用fastjson

JSONObject jsonObject1 = JSONObject.parseObject(json);

System.out.println(jsonObject1.keySet()); // [1, 2, true], keySet的类型是String

System.out.println(jsonObject1.get(1)); // "a"

System.out.println(jsonObject1.get("1")); // null

// 官方json

org.json.JSONObject jsonObject2 = new org.json.JSONObject(json);

System.out.println(jsonObject2.keySet()); // [1, 2, true], keySet的类型是String

System.out.println(jsonObject2.get("1")); // "a"

System.out.println(jsonObject2.get(1)); // 编译错误,get方法中的key只能是String

}

}

使用fastjson和官方的json库分别对json进行了实验:

序列化

官方的json和fastjson在构建json时,添加元素时,key都只能是字符串,上述demo中使用了map获取到key为数值的 “json结构”。

反序列化

demo中可以看出,fastjson的提供了获取非字符串key的get方法,官方json库只能获取字符串key,其中jsonObject2中的key已经被转换为字符串,参见下图:

abcea1f23808233304054b2674fd9c4f.png

小结

标准的Json结构的key必须是string类型的,在使用一些第三方的库时,对key时其他类型的支持程度并不相同,建议后续使用json时,key的类型设定为string类型,减少多系统协作时的问题。

如有任何知识产权、版权问题或理论错误,还请指正。

转载请注明原作者及以上信息。

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

json按照key排序c语言实现,Json中的key类型 的相关文章

  • 深度学习(入门)——逻辑回归模型(Logistics Regression)

    从逻辑回归开始 是因为这是一个简单的 可以理解成为一个简单的一层的神经网络 后续将逐步深入 了解更复杂的神经网络 一 假设函数 逻辑回归算法适用于二分类问题 例如在输入一个猫的图片到模型中 模型会输出1 这是一只猫 或者0 不是一只猫 对于
  • 在RHEL6配置IPv6 DNS Server

    Youtube上有一个视频是关于IPv4 DNS Server配置的 链接为https www youtube com watch v ZQkMYWTx28o 我在这里照猫画虎 配置一下IPv6的 以本人的机器为例 网卡为eth3 IPv6
  • sql重难点

    SQL总结 语法部分 1 exists和in的区别 where exists select x from employees e where e department id d department id where department
  • 小议CSDN周赛57期 - 凑数

    本期周赛几乎忘记参加 在最后几分钟的时候上来看了看 那些选择判断一通乱选 填空题也已经被吐槽得差不多了 这里不多说 只说我对第一道编程题的看法 吐槽 因为 C 站的机制是 即使它错了 它也不会承认 印象里只承认且改过一次 再争辩只会把你拉黑
  • HTML样式

    目录 HTML 的 style 属性 不赞成使用的标签和属性 应该避免使用下面这些标签和属性 HTML 样式实例 背景颜色 HTML 样式实例 字体 颜色和尺寸 HTML 样式实例 文本对齐 一个完整的实例 style 属性用于改变 HTM
  • 安卓手机玩游戏卡顿怎么解决_手机玩游戏的时候卡顿,怎么处理?

    手机内存不足或者是后台开了太多的应用程序 请关闭不需要的应用程序 并且定时清理手机缓存垃圾 释放内存 一 iPhone6玩游戏卡顿怎么办 1 关闭Assistive Touch 对于很多果粉来说 为了避免对Home键造成伤害 Assisti
  • 心电图心跳分类

    目录 背景介绍 数据探索性分析 特征工程 时间序列特征 背景介绍 赛题以医疗数据挖掘为背景 要求选手使用提供的心跳信号传感器数据训练模型并完成不同心跳信号的分类的任务 开源内容 https github com datawhalechina
  • HDU--1247:Hat’s Words (字典树)

    1 题目源地址 http acm hdu edu cn showproblem php pid 1247 2 解题思路 第一次接触字典树 代码也是参考别人的 代码参考博客 http blog csdn net red flame artic
  • [DevEco]解决“XXX“is not translated into en(English) ans zh(Chinese)

    问题描述 其实这个问题如字面意思 你在设置element string json的时候没有进行双语翻译 由于项目是国际版项目有中英双语string json配置文件 问题解决 分别在en element和zh element的string
  • QT---信号与槽机制

    QT 信号与槽机制 信号 signal 槽 slot 槽函数的命名格式 信号与槽的关联 实例1 自动关联 实例2 手动关联 信号 signal 信号是由对象改变状态后发射 emit 出去的事件 例如 一个pushButton 对象 最常见的
  • 一个android项目开发遇到的各种小问题(一)

    1 map格式字符串如何解析 借助json 先将字符串转化为json格式 再取值 JSONObject object new JSONObject posMap clientIden object getString iden 1 andr
  • windows下apache开启FastCGI

    1 在此链接下载一个合适的mod fcgid 文件 64位下载第一个 32位第二个 http www apachelounge com download 2 将解压后将文件中的 mod fcgid so 复制到apache的modules目
  • 用ProGuardGui混淆多个有依赖关系的项目,亲测有效

    前提 公司要混淆代码 A项目依赖B项目 要整体混淆AB这两个项目 步骤1 把AB两个项目通过maven命令打成同一个jar包 在pom文件里添加如下 执行maven命令语句 assembly assembly
  • SqueezeNet算法解析—鸟类识别—Paddle实战

    文章目录 一 理论基础 1 前言 2 设计理念 2 1 CNN微架构 CNN MicroArchitecture 2 2 CNN宏架构 CNN MacroArchitecture 2 3 模型网络设计探索过程 2 4 结构设计策略 2 5
  • Qt下载(多种下载通道+所有版本)

    Qt 体积很大 有 1GB 3GB 官方下载通道非常慢 相信很多读者会崩溃 所以建议大家使用国内的镜像网站 较快 或者使用迅雷下载 很快 作为 Qt 下载教程 本文会同时讲解以上三种下载方式 Qt 官方下载 非常慢 Qt 官网有一个专门的资
  • Qt CSV文件的创建,读写操作

    文章目录 一 CSV文件介绍 二 创建CSV文件 三 写入CSV文件 四 读取CSV文件 一 CSV文件介绍 逗号分隔值 Comma Separated Values CSV 有时也称为字符分隔值 因为分隔字符也可以不是逗号 其文件以纯文本
  • scala和spark的下载与安装

    简易安装scala和spark 一 安装scala 1 安装scala scala下载注意和jdk的版本号 下载地址 https www scala lang org download 2 上传到linux虚拟机里 可通过rz方式上传 上传
  • 量化交易是如何实现的?

    前面我们讲到 其实最简单的量化交易 就是定投 设置好标的 时间 金额 那么不需自己动手 就可以按照设置的策略进行定投 这就是量化交易的最初形态 那么 为了实现更加复杂一些的交易 比如说 选股 买卖点位的确定 追踪实时行情等 应该怎么去实现呢
  • Python_数据读取_读取单个csv文件和批量读取csv文件

    读取单个csv pd read csv 直接读取单个csv文件通过pd read csv 函数直接在指定路径进行文件读取 需要利用Pandas包 其中 1 路径前的r表示路径符号不转义 window操作系统下不再用调整 为 或 进行文件读取

随机推荐

  • spark dataframe 数据类型转换

    文章目录 1 spark sql数据类型 数字类型 日期类型 复杂类型 2 spark sql和scala数据类型对比 3 spark sql数据类型转换示例 代码 输出 1 spark sql数据类型 数字类型 ByteType 代表一个
  • 解决连接腾讯云Ubuntu服务器,使用Xshell和WinSCP无法直接用root用户登陆

    发现腾讯云服务器登入只能用ubuntu用户名登入 但是无法使用root登录 下面是解决方法 1 首先使用Xshell用ubuntu用户进入系统 输入命令 sudo passwd Enter new UNIX password 然后输入密码
  • 没有权限删除文件

    通过远程发版时 有可能会没有权限删除文件 如下解决方法 1 将user 用户切换root 用户 sudo su root 该方法不一定成功 因为有可能设置权限你不能切换 但成功以后一劳永逸 当方法1没有成功时 采用如下方法 2 将你所操作的
  • 网络请求-登录

    post请求的header中发送本地存储的token 校验服务器中是否存在
  • jsbridge原理_Hybrid App技术解析 -- 原理篇

    引言 随着 Web 技术和移动设备的快速发展 Hybrid 技术已经成为一种最主流最常见的方案 一套好的 Hybrid架构方案 能让 App 既能拥有极致的体验和性能 同时也能拥有 Web技术 灵活的开发模式 跨平台能力以及热更新机制 想想
  • FLatten Transformer 简化版Transformer

    今天在找论文时 看到一篇比较新奇的论文 在这里跟大家分享一下 希望可以给一些人提供一些思路 虽然现在Transformer 比较火 在分割上面也应用的比较多 但是我一直不喜欢用 其中一个原因是结构太复杂了 平时我主要用一个sel atten
  • Java正则工具类:字母数字下划线、数据库url校验等

    文章目录 前言 一 正则基础语法 二 正则工具类 总结 前言 本文内容观摩的是其他作者的代码 在基础上增加修改了一些 参考原文地址 java用正则表达式 提示 以下是本篇文章正文内容 下面案例可供参考 一 正则基础语法 字符 描述 匹配输入
  • RabbitMQ --- 惰性队列、MQ集群

    一 惰性队列 1 1 消息堆积问题 当生产者发送消息的速度超过了消费者处理消息的速度 就会导致队列中的消息堆积 直到队列存储消息达到上限 之后发送的消息就会成为死信 可能会被丢弃 这就是消息堆积问题 解决消息堆积有三种思路 增加更多消费者
  • Numpy中的转换成数组的array函数(更新中)

    今天给大家讲解一下图像处理和深度学习里面一个常用的函数array array的功能是接收一个多位置数 例如列表list 元 组tuple等 列表 list1 1 2 3 list2 1 2 3 list3 1 2 3 元组 tuple 1
  • 单片机串口时序与TTL电平

    串口是一个广义的概念 这是单讲单片机的串口UART 以及单片机的TTL电平 主要是记录一下自己忘了还能再看一下 1 TTL电平标准 输出 L lt 0 8V H gt 2 4V 输入 L lt 1 2V H gt 2 0V TTL器件输出低
  • VTK笔记-体绘制-vtkVolume

    体渲染 体渲染是一个用于描述3D数据渲染过程的术语 这里的3D数据是指其属性信息遍及3D空间 而不是一个在3D空间中的2D曲面 面渲染是对数据的表面或者一个抽取的轮廓进行渲染 是通过对面上的标量属性进行显示的 面渲染能显示其表面或者一个抽取
  • 常用数据结构与算法:二叉堆(binary heap)

    一 什么是二叉堆 二 二叉堆的实现 三 使用二叉堆的几个例子 一 什么是二叉堆 1 1 二叉堆简介 二叉堆故名思议是一种特殊的堆 二叉堆具有堆的性质 父节点的 键值 总是大于或等于 小于或等于 任何一个子节点的键值 二叉堆又具有二叉树的性质
  • vue 集成file-saver和xlsx 实现前端表格导出

    1 npm安装 npm install xlsx save npm install file saver save 2 创建export js import FileSaver from file saver import as XLSX
  • ntp时间同步软件_MES、SCADA项目中的时间同步—S7-1500和PC通过NTP进行时间同步

    写在面前 文中链接仅在微信公众号有效 大家好 我是小智 智能制造之家号主 前面我们在谈到MES SCADA项目的时候 更多的是从网络 从通讯协议 从数据采集方向去阐述 比如网络丢包 比如modbus TCP 比如S7 COMM 又比如网络冗
  • 踩坑之路(jpa的批量插入) Oracle

    今天做项目的一个需求 需要把其他地方的数据存储到本地数据里面 没想到一次踩了两个坑 因为需要保存的数据很大 而且每天都需要保存一次 第一次用的jpa的saveAll方法 测试了一遍 保存下来总共花了50分钟 老大看时间的太慢了 提醒了我一下
  • day10-Dom操作

    js Dom 概述 1 通过js获取页面上的元素 2 操作元素 2 1 操作元素的样式 2 2 操作元素的类名 2 3 操作元素属性 2 4 操作元素的内容 2 5 获取元素在dom中的一些信息 3 利用js来生成 添加 删除 修改 克隆元
  • 盘点一个Python自动化办公需求——获取文件夹下所以文件夹的名字,并存excel为一列

    01 前言 这个事情还得从前几天在Python最强王者群 东哥 问了一个Python自动化办公处理的问题 需求倒是不难 一起来看看吧 02 实现过程 这里 wangning 又给了一个答案 他自己之前整理的文章 不过需要自己稍微修改下才行
  • 几种硬盘IO性能测试工具

    dd工具 操作系统 ubuntu 12 04 测试工具 dd 版本 8 21 执行dd version来查看 工具说明 dd命令能粗略测试硬盘IO性能 不足 执行dd命令测试硬盘IO性能 对硬盘的损害很大 不建议多次或长时间尝试 测试命令
  • POSTMAN提取接口返回值

    记录一下 创建一个请求在Tests模块写入提取方法 如图 可点击右侧 Set a globals variable 直接生成写入全局变量语句 set token tk 中的 token为全局变量名称 切记后边的tk 变量名 不要加引号 写好
  • json按照key排序c语言实现,Json中的key类型

    JSON JavaScript Object Notation 是一种轻量级的数据交换格式 易于人阅读和编写 同时也易于机器解析和生成 它基于JavaScript Programming Language Standard ECMA 262