JSON 初学笔记

JSON

JSON 是一种数据存储的规范,存储在硬盘上的多是 .json 文件;而在程序的处理中,经常是某个 字符串 符合 JSON 规范,这个字符串可以被相关的各种函数进行各种类型的处理。(PS:可以百度到各种检查一个文本是否符合 JSON 规范的网页)

常用于不同工程之间数据的中转(特别是这些工程都适用不同的语言的时候),许多语言对于 JSON 都有良好的支持;同时,JSON文件本身也具有一定的可阅读性。

JSON 文件组织

JSON 文件由一个 Dictionary 或者一个 Dictionary 数组(List, vector之类)组成,其文件组织如下(注意,不论是 dict 还是 list ,其最后一个元素后面都是没有 , 的:

  • 一个 Dictionary
{
    "eax": 0,
    "ecx": 0,
    "edx": 0,
    "ebx": 0
}
  • Dictionary 数组
[
	{
	    "eax": 0,
	    "ecx": 0,
	    "edx": 0,
	    "ebx": 0
	},
	{
	    "eax": 0,
	    "ecx": 0,
	    "edx": 0,
	    "ebx": 0
	}	
]

Python JSON

python 自带 JSON 的处理包

import json

导入 JSON (serialize)

  • dump(obj, fp) 可以将一个对象直接 dump 到本地文件,例如:
with open("output.json", "w") as f:
	json.dump(obj, f)
  • dumps(obj) 函数可以将一个组织好的 dict 或者 list 直接 dump 成一个 JSON 格式的 string
stra = json.dumps(dicta)

dumps 函数有很多可选参数,例如:indent 可以指定每个单元之间换行并缩进相应长度,不同层次结构之间的缩进是累加的,缩进的效果如我前面的那两个 JSON 展示所示。(python.org 上的 json ,这里还有输出的转换表)

需要注意的是,json.dumps() 返回一个符合 JSON 规范的 string, 当时,如果只是简单地将几个这样的 string 拼接在一起,得到的结果并不是正确的 JSON 字符串,因此,如果需要导出多个这样的 dict ,请将它们组织在同一个 list 中。

jsonStr = json.dumps([dicta, dictb, dictc]) 

得到的 string 就可以通过 python 的 文件读写 或 命令行里的输出重定向 等方式输出到文件

导入 JSON (Deserialize)

与输出的方式相似,json.load()json.loads() 提供了从文件和字符串读入(Deserialize)的方式。

python tricks

对于 python 的内置数据类型,如 list , dict 可以直接使用 son.dumps() 去做。但是如何简单快速地导出我们自己写的类呢?如果我们的类定义如下:

class register:
	def __init__(self):
		self.eax = 0;
		self.ecx = 0;
		self.edx = 0;
		self.ebx = 0;

怎样才能快速地把这个类转换成一个如下的 dict 呢?

{'eax':0, 'ecx':0, 'edx':0, 'ebx':0}

对于 python 的每一个类,都有一些名字是 __xxx__ 的 method,即便对于我们自己写的类,尽管我们没有去重写这些 method ,python 也会自动帮我们生成一个默认的 method 。这里我们用到的就是 __dict__

>>> reg = register()
>>> print(reg.__dict__)
{'eax': 0, 'ecx': 0, 'edx': 0, 'ebx': 0}
>>> json.dumps(reg.__dict__)
'{"eax": 0, "ecx": 0, "edx": 0, "ebx": 0}'

stackoverflow链接

C sharp

(废话:由于我需要提供从 python 到 Unity 的数据交流,因此这里直接跳到了 C#)

C sharp 文件读写

参考 MS 给出的一个范例:link “读取和回显文件”

Deseralize JSON

推荐使用 Newtonsoft 包,这个可以在 VS 或 Rider 里下载。

using Newtonsoft.Json;
// in a certain function:
// one dict
var dict = JsonConvert.DeserializeObject<Dictionary<string, string>>(file);
// one list
var list = JsonConvert.DeserializeObject<List<Dictionary<string, string>>>(file);                
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值