Unity 数据读取|(四)Json文件解析(Newtonsoft.Json ,Litjson,JsonUtility,SimpleJSON)_unity newtonsoft.json-程序员宅基地

技术标签: c#  unity  游戏引擎  # Unity数据读取  json  

1. 前言

  • JSON文件是一种纯文本文件,用于存储数据,并且是基于JavaScript的一个子集。JSON文件通常用于存储和传输数据,以及在应用程序之间交换信息。它们以键值对的形式存储数据,其中键是字符串,值可以是字符串、数字、布尔值、数组、对象或null。
  • JSON文件通常具有.json扩展名,例如example.json。在JSON文件中,数据以层次结构的形式组织,可以表示嵌套的对象和数组。JSON文件通常用于存储配置信息、数据交换和持久化存储。
  • 可以在https://www.json.org 了解关于JSON的更多信息。

2. 优缺点

  • JSON文件的优点包括:
    • 语法简单:JSON的语法非常简单,易于学习和使用,它基于JavaScript的一个子集,因此熟悉JavaScript的开发者可以很容易地使用JSON。
    • 数据结构清晰:JSON以键值对的形式存储数据,层次结构分明,使得数据的组织形式非常清晰,易于理解和处理。
    • 轻量级:JSON文件是纯文本文件,存储的数据量相对较小,比较轻量级,适合存储和传输大量数据。
    • 支持跨平台:JSON文件是跨平台的,可以在不同的操作系统和设备上使用,使得数据的共享和交换更加方便。
  • 然而,JSON文件也存在一些缺点:
    • 不支持注释:JSON文件不支持注释,这使得代码的维护和阅读变得困难。
    • 安全性问题:如果与不受信任的服务或不受信任的浏览器一起使用JSON,可能会存在安全漏洞,使得数据易受攻击。
    • 无法直接编辑:JSON文件是纯文本文件,无法像XML文件那样在文本编辑器中直接编辑,需要使用专门的工具或编程语言进行解析和编辑。
    • 无法存储函数或类:JSON只能存储数据,无法存储函数或类等复杂的数据结构,这限制了JSON的使用范围。

3. 解析

  • 格式模板
{  
  "name": "John",  
  "age": 30,  
  "married": true,  
  "address": {  
    "street": "123 Main St",  
    "city": "New York",  
    "state": "NY",  
    "postal_code": "10001"  
  },  
  "phone_numbers": [  
    "555-1234",  
    "555-5678"  
  ],  
  "career": null,  
  "hobbies": ["reading", "traveling"]  
}

3.1 Newtonsoft.Json

3.1.1 下载地址

3.1.2 优缺点

  • 优点:
    • 解析速度快:Newtonsoft.Json 的解析速度非常快,特别适合处理大量的 JSON 数据。
    • 支持多种数据格式:Newtonsoft.Json 可以解析多种数据格式的 JSON 数据,包括数组、对象、字符串、数字等等。
    • 可扩展性强:Newtonsoft.Json 提供了丰富的扩展接口和选项,方便开发者进行定制和扩展。
    • 可以解析复杂的Json,不需要和Json字段一对一
  • 缺点:
    • 无法使用 IL2CPP 方式打包:Newtonsoft.Json 不支持使用 IL2CPP 方式打包,这可能会限制其在某些特定环境下的适用性。
    • 解析报错:使用 Newtonsoft.Json 解析 JSON 数据时,如果 JSON 数据格式有误,可能会导致程序崩溃或者出现不可预测的行为。
    • 无法加密包体:Newtonsoft.Json 不支持对序列化后的数据进行加密,这可能会导致数据泄露或者被篡改。

3.1.3 解析

  • JsonConvert.DeserializeObject(json);将一个json字符串解析成一个类对象。
 Person person = JsonConvert.DeserializeObject<Person>(json);
  • JsonConvert.SerializeObject;将一个类对象转化成一个json字符串
string jsonStr = JsonConvert.SerializeObject(person);

3.2 listjson

3.2.1 下载地址

3.2.2 优缺点

  • listjson文件的优点包括:
    • 轻量级和高效:LitJson 的核心库非常小,没有任何外部依赖,因此它可以快速地被加载和使用。此外,LitJson 在解析和生成 JSON 数据时非常高效,可以处理大量的 JSON 数据而不会导致性能问题。
    • 支持多种数据类型:LitJson 支持常见的 JSON 数据类型,如字符串、数字、布尔值、数组和对象等。这使得它能够满足大多数 JSON 数据处理的需求。
    • 易于使用:LitJson 的 API 设计得非常简洁易用,使得开发者可以方便地进行 JSON 数据的序列化和反序列化操作。它提供了易于使用的函数和方法,以及对 JSON 数据的直观封装和操作。
    • 强大的序列化功能:LitJson 提供了强大的序列化功能,可以将 C# 对象序列化为 JSON 数据,并且支持将 JSON 数据反序列化为 C# 对象。这使得开发者可以轻松地将数据在 C# 对象和 JSON 数据之间进行转换。
  • 缺点:
    • 不支持自定义属性:虽然 LitJson 支持将大多数 C# 对象序列化为 JSON 数据,但它不支持将自定义属性序列化为 JSON。这意味着如果您的 C# 对象包含自定义属性,LitJson 可能无法正确地序列化这些属性。
    • JSON字符串中的key也需要和类字段的名字完全一致,如果不对应的话会解析失败。
    • 不支持跨平台:由于 Unity 的跨平台特性,LitJson 可能无法在所有平台上使用。这可能会限制其在某些特定环境下的适用性。
    • 可能存在内存泄漏:在使用 LitJson 的过程中,如果频繁地进行 JSON 数据的序列化和反序列化操作,可能会导致内存泄漏的情况。这主要是因为 Unity 的内存管理机制所致,但可以通过合理的内存管理和使用来解决这个问题。

3.2.3 解析

  • JsonMapper.ToObject(json):将一个json字符串解析成一个类对象
 Person person = JsonMapper.ToObject<Person>(str);
   // 解析json字符串 
  JsonData jsonData = JsonMapper.ToObject(jsonStr);  
   // 根据json的对象名来获取数据
   Debug.Log("name = " + (string)jsonData["name"]);  
  • JsonMapper.ToJson:将一个类对象转化成一个json字符串
 string jsonStr = JsonMapper.ToJson(persion);

3.3 JsonUtility

3.3.1 优缺点

  • 优点:
    • 高效:JsonUtility 序列化和反序列化 JSON 数据的速度非常快,特别适合处理大量的 JSON 数据。
    • 简单易用:JsonUtility 的 API 简洁易用,方便开发者进行 JSON 数据的序列化和反序列化操作。
    • 不依赖第三方库:JsonUtility 不依赖任何第三方库,可以独立使用。
  • 缺点:
    • 不支持自定义属性:JsonUtility 不支持将自定义属性序列化和反序列化为 JSON。这意味着如果您的 C# 对象包含自定义属性,JsonUtility 可能无法正确地序列化这些属性。
    • Json字符串的key需要和类字段的名字完全一样
    • 不支持跨平台:由于 Unity 的跨平台特性,JsonUtility 可能无法在所有平台上使用。这可能会限制其在某些特定环境下的适用性。
    • 对 List 和 Dictionary<TKey,TValue> 支持有限:JsonUtility 无法直接序列化和反序列化 List 和 Dictionary<TKey,TValue>,需要将它们包装到一个类中才能进行操作。

3.3.2 解析

  • JsonUtility.FromJson(json);将一个json字符串解析成一个类对象。
 Person person= JsonUtility.FromJson<Person>(json);
  • JsonUtility.ToJson;将一个类对象转化成一个json字符串。
string jsonStr= JsonUtility.ToJson(person);

3.4 SimpleJSON

3.4.1 下载地址

3.4.2 优缺点

  • 优点:
    • 体积小:SimpleJSON的源代码非常简洁,没有过多的类库和依赖,因此体积很小,可以快速地集成到项目中。
    • 速度快:SimpleJSON在解析和生成JSON时速度非常快,可以高效地处理大量的JSON数据。
    • 集成容易:SimpleJSON可以通过简单的几行代码就集成到项目中,无需过多的配置和设置。
    • 支持常用的JSON操作:SimpleJSON支持常用的JSON操作,例如序列化、反序列化、查询等。
  • 缺点:
    • 不支持复杂的JSON格式:SimpleJSON只支持简单的JSON格式,对于一些复杂的JSON格式可能会无法正确解析。
    • 无法直接将JSON对象转换为XML:SimpleJSON没有提供直接将JSON对象转换为XML的功能,需要手动进行转换。
    • 没有完整的文档:SimpleJSON没有提供完整的文档,使用时需要参考源代码和示例代码。

3.4.3 解析

  • JSON.Parse(string str);
JSONNode node = JSON.Parse(str);
var Nmae = node["Nmae"].Value;      
var age = node["age"].AsFloat;  
  • new JSONObject()和new JSONArray()
        JSONNode nodeRoot = new JSONObject();
        JSONNode node1 = new JSONArray();
        for (int i = 0; i < books.Count; i++)
        {
    
            JSONNode node0 = new JSONObject();
            node0.Add("Name", books[i].name);
            node1.Add(node0);
        }
        nodeRoot.Add("Preson", node1);

4. 总结

  • 解析时间:Newtonsoft.Json通常被认为是最快的JSON库之一,尤其是在处理大型JSON数据时表现出色。Litjson也具有较快的解析速度,但相对于Newtonsoft.Json可能稍慢一些。JsonUtility和SimpleJSON在解析时间方面可能不如前两者,尤其是在处理大型或复杂JSON数据时。
  • 内存占用:Newtonsoft.Json和Litjson通常会占用较多的内存,因为它们提供了丰富的功能和灵活性,但这也意味着它们可以处理更复杂的JSON数据。JsonUtility和SimpleJSON在内存占用方面可能更加轻量级,适合于对内存消耗有限制的场景。
  • 易用性:Newtonsoft.Json和Litjson提供了丰富的API和功能,使其易于使用和灵活处理各种JSON数据。JsonUtility在Unity引擎中内置,因此在Unity项目中使用非常方便。SimpleJSON也相对易于使用,尤其适合于处理简单的JSON数据。
  • 功能丰富度:Newtonsoft.Json和Litjson提供了丰富的功能,包括对JSON数据的序列化、反序列化、查询、操作等。JsonUtility在功能上相对较少,主要用于基本的JSON操作。SimpleJSON也提供了一些简单的JSON操作功能,但相对于Newtonsoft.Json和Litjson来说功能较为有限。
  • 总体而言,如果你不需要处理非常大型的 JSON 数据,SimpleJSON 和 LitJson 都是很好的选择。如果你需要处理更复杂的 JSON 数据,或者对性能有很高的要求,可以考虑使用 Newtonsoft.Json 或 JsonUtility。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/backlighting2015/article/details/134354169

智能推荐

Win8.1+VS2010环境下Qt4.8.7编译_vs2010_qt4.8.7如何编译pdb文件-程序员宅基地

文章浏览阅读2.9k次。参考http://www.cnblogs.com/elect-fans/archive/2012/03/29/2422816.html实现Win8.1+VS2010环境下Qt4.8.7编译_vs2010_qt4.8.7如何编译pdb文件

C++批量修改文件后缀名(提供多种方法)_修改文件后缀怎么改c++-程序员宅基地

文章浏览阅读2.6k次,点赞2次,收藏6次。C++批量修改文件后缀名的Qt程序方法一:#include "stdafx.h"#include <stdio.h>#include <fstream>#include <Windows.h>#include <cstdio>#include <iostream>#include <string>#include <io.h>#include <vector>#include <_修改文件后缀怎么改c++

Spring Boot Admin2 实例状态监控详解-程序员宅基地

文章浏览阅读3k次,点赞108次,收藏158次。在微服务中集成Spring Boot Admin 的主要作用之一就是用来监控服务的实例状态,并且最好是当服务DOWN或者OFFLINE的时候发消息提醒,SBA2 提供了很多提醒方式,并且SBA2 已经集成了钉钉,只要进行少量配置即可将状态变更发送到钉钉_admin2

js验证注册页面(用户名、手机号、邮箱、单位名称、单位地址、联系人姓名、)_js校验公司名称-程序员宅基地

文章浏览阅读3.1k次。使用js+jQuery验证注册页面<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%><%@include file="/common/global.jsp"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML ..._js校验公司名称

xss漏洞java代码_Java处理XSS漏洞的工具类代码-程序员宅基地

文章浏览阅读694次。public classAntiXSS {/*** 滤除content中的危险 HTML 代码, 主要是脚本代码, 滚动字幕代码以及脚本事件处理代码**@paramcontent* 需要滤除的字符串*@return过滤的结果*/public staticString replaceHtmlCode(String content) {if (null ==content) {r..._xxs 漏洞替换特殊字符串 java

webstorm运行项目error:03000086错误的解决_webstorm --openssl-legacy-provider-程序员宅基地

文章浏览阅读307次。03000086 错误解决。_webstorm --openssl-legacy-provider

随便推点

安卓逆向 和 手游辅助 学习 路线-程序员宅基地

文章浏览阅读4.4k次,点赞14次,收藏170次。From:https://zhuanlan.zhihu.com/p/95915254 知乎:Android 逆向分析学习路线?:https://www.zhihu.com/question/25626303 入门篇 --- 学习Android安全和逆向开发的路线总结:https://www.52pojie.cn/thread-1065039-1-1...._手游逆向

OkHttpUtils - 封装了okhttp的网络框架(1),Android面试真题精选_com.zhy:okhttputils-程序员宅基地

文章浏览阅读980次,点赞22次,收藏11次。目前内部提供的包含BeanCallBack, StringCallBack, FileCallBack, BitmapCallback,可以根据自己的需求去自定义Callback。_com.zhy:okhttputils

HDFS_hdfs配置3副本存储是哪一个字段-程序员宅基地

文章浏览阅读5.7w次。HDFSHDFS全称 Hadoop Distribute File System 即 Hadoop分布式文件系统_hdfs配置3副本存储是哪一个字段

大数据时代带来智慧生活-程序员宅基地

文章浏览阅读174次。如何在大数据时代中把握大数据应用的机遇与挑战,智慧城市如何建设?昨日,上海大学兼职教授、华光大数据研究院院长蒋永生在本社展示、讲解了大数据应用以及给百姓生活带来的变化。  智慧城市从顶层设计起步  目前国内已有100多个城市提出智慧城市的构想,上海、成都、宁波和..._大数据时代下的数字化生活 蒋永生

每周一道算法题001:回文数-程序员宅基地

文章浏览阅读140次。题目:找出大于10的最小的2进制,8进制,10进制都是回文数的最小的数。回文数指的是正读和反读都是一样的数,例如:33,10001,123454321...思路:先转换进制,然后统一处理成字符串进行比较解答:PHPfunction execute(){ $x = 11; while (1) { if ($x == strrev($x) ..._如果字符串满足以下条件之一

Hotel experience Privacy Policy-程序员宅基地

文章浏览阅读58次。This application understands the importance of personal information to you and will do its best to protect the security and reliability of your personal information. We are committed to maintaining your trust in us and abide by the following principles to

推荐文章

热门文章

相关标签