JSON

用了很久的json,但是却没有完整地总结过。现通过这篇文章稍微整理一下
每个编程语言都会涉及到对json相关操作,之后都将记录在这篇博客中

一、JSON定义

JSON(JavaScript Object Notation,JavaScript对象表示法)是一种轻量级的数据交换语言,用来传输由属性值或者序列性的值组成的数据对象。
尽管JSON是JavaScript的一个子集,但JSON是独立于语言的文本格式。很多编程语言都支持 JSON 格式数据的生成和解析。JSON 的官方 MIME 类型是 application/json,文件扩展名是 .json

二、JSON 语法规则

  • 使用key: value表示数据
  • 数据由,分隔
  • {}保存对象
  • []保存数组

json的key只能取stringvalue可取的类型有:

  • string:字符串
  • number:数字
  • boolean:true/false
  • null:空
  • array:[]
  • Object:{}

例:

{ 
  "key1": "value1", 
  "key2": ["value2", "value3"],
  "key3": {"key31": "value31", "key32": "value32"}
}
  

2.1.畸形JSON

畸形JSON指的是不符合JSON语法规则的表达方式,如:

  • 使用单引号:{"key": 'value'}
  • key为非字符串类型:{key: "value"}

2.2.JSON检测工具:

有时候我们可能得到一行很长的json数据,不便于阅读。有许多工具可以帮助我们检测json数据是否合法,并使之更加清晰易读。

shell:使用python json模块或者jq工具
text='{ "key1": "value1", "key2": ["value2", "value3"]}'
echo $text | python -m json.tool

{
    "key1": "value1",
    "key2": [
        "value2",
        "value3"
    ]
}
# Centos/Ubuntu/Macos 
yum/apt-get/brew install jq

echo '{ "key1": "value1", "key2": ["value2", "value3"]}' | jq
{
  "key1": "value1",
  "key2": [
    "value2",
    "value3"
  ]
}
python
import json
# json.dumps 用于将 Python 对象转换成 JSON 字符串
json.dumps({"key": "value"})  --> type = str

print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4))
{
    "4": 5,
    "6": 7
}

# json.loads 用于解析 JSON 数据,使之成为 Python 数据类型
json.loads('{"key": "value"}')  --> type = dict

python对象类型转换为json数据类型对照表:

pythonjson
dictobject
tuple, listarray
strstring
int, float, int- & float-derived Enumsnumber
True/Falsetrue/false
Nonenull

JSON数据类型转换为python对象类型对照表:

jsonpython
objectdict
arraylist
stringstr
number(int)int
number(float)float
true/falseTrue/False
nullNone

Ref- python3 json

js
// 将JSON字符串转换为js对象
JSON.parse('{"key": value}')

// 将js对象转换为JSON字符串
JSON.stringify(obj);

三、Yaml to Json

yaml是json的超集,通常用于配置文件,阅读性更好
可以使用yq(pip install yq)将yaml转换为json

cat config.yaml | yq

如果一个yaml文件很长,可以将其转换为json,然后获取感兴趣的字段
比如需要查看一个k8s的deployment中定义的pod内有哪些容器

kubectl get deployment  my-deployment -o yaml | yq .spec.template.spec.containers[].image
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值