C# Json文件读取
文章目录
- 前言
- Json语法格式
- JsonData 转化为Json格式字符串
- 将Json文本文件转换为list集合【根为数组】
- 将Json文本文件转换为list集合【 当根是对象时】
- 转换为Json格式字符串
前言
- 关于用litjson来解析json格式的文件,我看过两个教程,第一个并没有讲json的语法原理,只讲了怎么使用。第二个很清晰明了说了数组和对象这个概念
- 但凡是有数组的地方,都可以用list来进行替换
- JSON跟XML一样是一种是数据格式,都是文本文件
Json语法格式
- JSON 使用 JavaScript 语法来描述数据对象,但是 JSON 仍然独立于语言和平台。JSON 解析器和 JSON 库支持许多不同的编程语言。
- 数据在键值对中
- 数据由逗号分隔
- 花括号保存对象
- 方括号保存数组
- Json由键/值对构成
- 值的类型如下
JSON 值可以是:- 数字(整数或浮点数)
- 字符串(在双引号中)
- 逻辑值(true 或 false)
- 数组(在方括号中)
- 对象(在花括号中)
- null
- 简单来说,Json就是对象和数组两种结构,通过不同的组合可以表示很多信息
- 通过键来取值或者赋值
- Json里面的属性名需要和对象的相一致
- Json的根要么是一个数组或者一个对象
JsonData 转化为Json格式字符串
JsonData jd = new JsonData();
jd["Name"] = "myname";
jd["Damage"] = 15;
//打印出来就是Json格式字符串
将Json文本文件转换为list集合【根为数组】
- 第一种方式 直接转换
List<Weapon> list = JsonMapper.ToObject<List<Weapon>>(File.ReadAllText("WEAPONAll.txt"));
- 第二种方式 先获取JsonData数组对象,然后遍历,取键值对,给对象赋值,最后将对象加入到集合中
JsonData jsond = JsonMapper.ToObject(File.ReadAllText("WEAPONAll.txt"));List<Weapon> list = new List<Weapon>();for (int i = 0; i < jsond.Count; i++){Weapon weapon = new Weapon();weapon.Name = jsond[i]["Name"].ToString();weapon.Damage = int.Parse(jsond[i]["Damage"].ToString());weapon.Duration = int.Parse(jsond[i]["Duration"].ToString());list.Add(weapon);}
- 第三种方式 先获得JsonData对象,然后遍历对象数组,将JsonData对象直接转化为相应实体类对象
JsonData jsond = JsonMapper.ToObject(File.ReadAllText("WEAPONAll.txt"));List<Weapon> list = new List<Weapon>();for (int i = 0; i < jsond.Count; i++){Weapon weapon = JsonMapper.ToObject<Weapon>(jsond[i].ToJson()); //注意这里是转换为Json字符串格式list.Add(weapon);}
将Json文本文件转换为list集合【 当根是对象时】
class Weapon{private List<Weapon> enemy = new List<Weapon>();public string Name { set; get; }public int Damage { set; get; }public int Duration { set; get; }public List<Weapon> Enemy { get => enemy; set => enemy = value; }public Weapon(string name, int damage, int duration, List<Weapon> list){this.Name = name;this.Damage = damage;this.Duration = duration;this.enemy = list;}public Weapon() { }public override string ToString(){return string.Format("name:{0}-damage{1}-duration{2},listCount{3}", Name, Damage, Duration,Enemy.Count);}}
- Json字符串
{"Name":"jueshi",
"Damage":21,
"Duration":15,
"Enemy":[{"Name":"rifle","Damage":20,"Duration":10},{"Name":"GongJian","Damage":10,"Duration":10},{"Name":"good","Damage":20,"Duration":10}]
}
- 转换步骤
Weapon wea = JsonMapper.ToObject<Weapon>( File.ReadAllText("WEAPONAll.txt"));Console.WriteLine(wea.ToString());Console.ReadKey(); //输出结果可以注意到List的count为3
转换为Json格式字符串
- 这个很简单
string data = JsonMapper.ToJson(weapons);
其它几个例子
- 嵌套的数组
[{"Type": [{"ItemID":1,"ItemName": "地基"},{"ItemID":2,"ItemName": "墙壁"},{"ItemID":3,"ItemName": "门"},{"ItemID":4,"ItemName": "窗户"}]},{"Type": [{"ItemID":11,"ItemName": "弓箭"},{"ItemID":12,"ItemName": "长矛"}]}
]
- 一种解析方法
public List<List<CraftingContentItem>> ByNameGetJsonData(string name){List<List<CraftingContentItem>> temp = new List<List<CraftingContentItem>>();string jsonStr = Resources.Load<TextAsset>("JsonData/" + name).text;JsonData jsonData = JsonMapper.ToObject(jsonStr);for (int i = 0; i < jsonData.Count; i++){List<CraftingContentItem> tempList = new List<CraftingContentItem>();JsonData jd = jsonData[i]["Type"];for (int j = 0; j < jd.Count; j++){tempList.Add(JsonMapper.ToObject<CraftingContentItem>(jd[j].ToJson()));}temp.Add(tempList); //一个数组里面包含对象,每个对象又包含一个数组}return temp;}
- 如果对象里面的某个字符串属性要进行分割
[{"MapId": 11,"MapContents":"0,1,1,1,2,0,0,1,2,1,0,0,0,1,1,0,0,0,0,1,0,0,0,0,0","MapName":"Wooden Bow"},{"MapId": 12,"MapContents":"0,0,0,1,2,0,0,0,1,1,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0","MapName":"Wooden Spear"}
]
- 一种解析方式
private Dictionary<int, CraftingMapItem> LoadMapContents(string name){Dictionary<int, CraftingMapItem> temp = new Dictionary<int, CraftingMapItem>();string jsonStr = Resources.Load<TextAsset>("JsonData/" + name).text;JsonData jsonData = JsonMapper.ToObject(jsonStr);for (int i = 0; i < jsonData.Count; i++){//取临时数据.int mapId = int.Parse(jsonData[i]["MapId"].ToString());string tempStr = jsonData[i]["MapContents"].ToString();string[] mapContents = tempStr.Split(',');string mapName = jsonData[i]["MapName"].ToString();//构造对象.CraftingMapItem item = new CraftingMapItem(mapId, mapContents, mapName);temp.Add(mapId, item);}return temp;}
- 最平常的解析方式
[{"ItemName": "Arrow","ItemNum": 64},{"ItemName": "Torch","ItemNum": 1},{"ItemName": "Axe","ItemNum": 1}
]
public List<InventoryItem> GetJsonList(string fileName){List<InventoryItem> tempList = new List<InventoryItem>();string tempJsonStr = Resources.Load<TextAsset>("JsonData/" + fileName).text;//解析JSON.JsonData jsonData = JsonMapper.ToObject(tempJsonStr);for (int i = 0; i < jsonData.Count; i++){InventoryItem ii = JsonMapper.ToObject<InventoryItem>(jsonData[i].ToJson());tempList.Add(ii);}return tempList;}
C# Json文件读取相关推荐
- springboot~openfeign从JSON文件读取数据
对openfeign不清楚的同学可以先看我这篇文章:springboot~openfeign从此和httpClient说再见 对于openfeign来说,帮助我们解决了服务端调用服务端的问题,你不需要 ...
- python读取中文文件乱码-详解Python的json文件读取及中文乱码显示问题解决方法...
Python的json文件读取及解决中文乱码显示问题 本文实例讲述了Python实现的json文件读取及中文乱码显示问题解决方法.分享给大家供大家参考,具体如下: city.json文件的内容如下: ...
- python json.loads()中文问题-Python实现的json文件读取及中文乱码显示问题解决方法...
本文实例讲述了Python实现的json文件读取及中文乱码显示问题解决方法.分享给大家供大家参考,具体如下: city.json文件的内容如下: { "cities": [ { & ...
- json文件读取并转换成为字典python
json文件读取并转换成为字典python # JSON到字典转化 f = open('info.json', 'r') info_data = json.load(f) print(info_dat ...
- 14.json文件读取
14.json文件读取 json文件读取 1.#读取jsonimport jsonstr='''[{"name":"Tom","gender" ...
- json文件读取之reader.onload中的定义的变量在其函数外部进行处理
采用FileReader读取json文件时,发现只能在reader.onload函数内部获取文件数据,且无法在函数外部访问其内部定义的变量,在网上查阅资料,发现也有博客提到这个问题,如下: VUE的r ...
- python读json文件数组_如何在python中从json文件读取json对象数组
我有一个名为example.json的json文件,包含以下内容[{ "product/productId" : "XXX", "product/ti ...
- json文件读取和搜索
# -*- coding: utf-8 -*- """ 本模块负责检索json文件内容,解决notepad++检索内容卡顿问题:copyright: (c) 2019 b ...
- python 超大json文件读取
一.流读取json文件 所读取的单个json文件大小超过700GB,使用json直接读取时出现内存溢出的情况.考虑使用 流读取的方式,代码如下: json_path = '../large_data/ ...
- 使用json文件读取数据
读取json文件 import json path = "a.json" # path为路径或者文件 with open(path,encoding="utf-8&quo ...
最新文章
- 关于loader加载的东西必须是继承sprite
- 不是每个打工人都能享受 996 的福报
- python长连接框架_python之websocket【长连接的实现】
- Spark 1.3 新特性 :176个贡献者,1000+ patches
- c语言 傲娇的十六进制,语言拟人向:来自Python、JAVA、C语言的“傲娇”自我介绍...
- Windows获取系统版本号
- 49 - 算法 - Leetcode 112 路径总和 -二叉树递归 带参数一起递归
- java源程序编译型_Java语言的源程序不是编译型的,而是编译解释型的
- Linux 服务器 监控命令
- 微服务升级_SpringCloud Alibaba工作笔记0027---Nacos集群配置上
- selenium切换窗口
- js中setTimeout()方法使用和窗口加载
- Android studio配置Google play服务
- 无线通信设备安装工程概预算编制_深圳电气安装造价培训-如何计算电气设备安装工程预算定额?...
- Linux 硬盘读写测速
- 在 uniapp 中使用阿里图标
- 人脸识别错误代码437是什么意思_英雄联盟手游unabletologin什么意思?显示unabletologin解决方法[多图]-攻略...
- Connext DDSQoS参考
- BUUCTF Misc 佛系青年
- FTP客户端--实现FTP文件的上传下载功能