文章目录

  • 前言
  • 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文件读取相关推荐

  1. springboot~openfeign从JSON文件读取数据

    对openfeign不清楚的同学可以先看我这篇文章:springboot~openfeign从此和httpClient说再见 对于openfeign来说,帮助我们解决了服务端调用服务端的问题,你不需要 ...

  2. python读取中文文件乱码-详解Python的json文件读取及中文乱码显示问题解决方法...

    Python的json文件读取及解决中文乱码显示问题 本文实例讲述了Python实现的json文件读取及中文乱码显示问题解决方法.分享给大家供大家参考,具体如下: city.json文件的内容如下: ...

  3. python json.loads()中文问题-Python实现的json文件读取及中文乱码显示问题解决方法...

    本文实例讲述了Python实现的json文件读取及中文乱码显示问题解决方法.分享给大家供大家参考,具体如下: city.json文件的内容如下: { "cities": [ { & ...

  4. json文件读取并转换成为字典python

    json文件读取并转换成为字典python # JSON到字典转化 f = open('info.json', 'r') info_data = json.load(f) print(info_dat ...

  5. 14.json文件读取

    14.json文件读取 json文件读取 1.#读取jsonimport jsonstr='''[{"name":"Tom","gender" ...

  6. json文件读取之reader.onload中的定义的变量在其函数外部进行处理

    采用FileReader读取json文件时,发现只能在reader.onload函数内部获取文件数据,且无法在函数外部访问其内部定义的变量,在网上查阅资料,发现也有博客提到这个问题,如下: VUE的r ...

  7. python读json文件数组_如何在python中从json文件读取json对象数组

    我有一个名为example.json的json文件,包含以下内容[{ "product/productId" : "XXX", "product/ti ...

  8. json文件读取和搜索

    # -*- coding: utf-8 -*- """ 本模块负责检索json文件内容,解决notepad++检索内容卡顿问题:copyright: (c) 2019 b ...

  9. python 超大json文件读取

    一.流读取json文件 所读取的单个json文件大小超过700GB,使用json直接读取时出现内存溢出的情况.考虑使用 流读取的方式,代码如下: json_path = '../large_data/ ...

  10. 使用json文件读取数据

    读取json文件 import json path = "a.json" # path为路径或者文件 with open(path,encoding="utf-8&quo ...

最新文章

  1. 关于loader加载的东西必须是继承sprite
  2. 不是每个打工人都能享受 996 的福报
  3. python长连接框架_python之websocket【长连接的实现】
  4. Spark 1.3 新特性 :176个贡献者,1000+ patches
  5. c语言 傲娇的十六进制,语言拟人向:来自Python、JAVA、C语言的“傲娇”自我介绍...
  6. Windows获取系统版本号
  7. 49 - 算法 - Leetcode 112 路径总和 -二叉树递归 带参数一起递归
  8. java源程序编译型_Java语言的源程序不是编译型的,而是编译解释型的
  9. Linux 服务器 监控命令
  10. 微服务升级_SpringCloud Alibaba工作笔记0027---Nacos集群配置上
  11. selenium切换窗口
  12. js中setTimeout()方法使用和窗口加载
  13. Android studio配置Google play服务
  14. 无线通信设备安装工程概预算编制_深圳电气安装造价培训-如何计算电气设备安装工程预算定额?...
  15. Linux 硬盘读写测速
  16. 在 uniapp 中使用阿里图标
  17. 人脸识别错误代码437是什么意思_英雄联盟手游unabletologin什么意思?显示unabletologin解决方法[多图]-攻略...
  18. Connext DDSQoS参考
  19. BUUCTF Misc 佛系青年
  20. FTP客户端--实现FTP文件的上传下载功能

热门文章

  1. ubuntu安装deb软件包文件
  2. ES系列三、基本知识准备
  3. 关于Cocos2d-x中图集中图片的调用
  4. timequest静态时序分析学习笔记之命令约束
  5. Dll学习心得(2)
  6. SQL Server 2008安装和配置图解图(转)
  7. HCIE-Security Day3:防火墙特征和组网方式
  8. babel css3新特性_css3 transform属性多值的顺序问题
  9. HDOJ--2092--整数解(水题)
  10. saltstack计划任务工具和其他命令