今天翻看了一下之前的博客,发现写了好几篇关于加载json的文章,今天正好有时间就把之前的几篇文章的内容总结一下,然后在添加一些新内容。
在unity里边可以用的加载json的插件有:JsonUtility(unity自带)、LitJson、Newtonsoft等。插件各有优势,我就不一一列举了,我习惯使用unity自带的json插件,目前足够使用。
在创建json文件的时候有两种方法,第一种是手写,第二种是代码生成。
不推荐第一种方法,但是万一用到了一定要注意不要用windows自带的笔记本打开json文件,用windows自带的笔记本保存文件的时候它会默认在文件的开头加入文件的类型,而且是隐藏的。这样在加载json文件的时候会一直报错,用unity自带的插件不会提示错误在哪,用别的插件会提示。出现这个问题后,用notepad++打开,然后在编码上改变一下格式,用记事本保存的utf-8是utf-8-bom,我们改成utf-8就没问题了。
第二种方法是用代码创建json文件,在创建过程中需要注意几个问题:用于创建json的子类需要序列化,属性需要初始化。后边我会用这种方法举例说明。
最后一点,无论什么平台均使用UnityWebRequest加载,这样无论哪个平台,都可以加载出json数据。
下面进行举例说明:
一、代码创建json文件:

using System;
using System.Collections.Generic;
using System.IO;
using UnityEditor;
using UnityEngine;/// <summary>
/// 用代码获取根目录下子节点的位置信息,然后保存在json文件中
/// </summary>
public class CreateJson : MonoBehaviour
{private void Start(){ModelInfoRoot modelInfoRoot = new ModelInfoRoot();if (transform.childCount > 0){for (int i = 0; i < transform.childCount; i++){var vchild = transform.GetChild(i);ModelInfo info = new ModelInfo();info.Name = vchild.name;info.localPos = vchild.localPosition;info.localRos = vchild.localRotation.eulerAngles;info.localScale = vchild.localScale;modelInfoRoot.ModelInfos.Add(info);}}var vbasePath = Path.Combine(Application.streamingAssetsPath, "Config");DirectoryInfo dir = new DirectoryInfo(vbasePath);if (!dir.Exists)dir.Create(); //创建文件夹var vconfigPath = Path.Combine(vbasePath, "ModelInfo.json");FileInfo fileInfo = new FileInfo(vconfigPath);if (fileInfo.Exists)fileInfo.Delete();StreamWriter writer = fileInfo.CreateText(); //创建文件writer.Write(JsonUtility.ToJson(modelInfoRoot));writer.Flush();writer.Dispose();writer.Close();AssetDatabase.Refresh(); //刷新unity工程,只能在编辑器模式下使用}
}/// <summary>
/// 子类
/// 需要序列化
/// </summary>
[Serializable]
public class ModelInfo
{public string Name = null;//属性需要初始化public Vector3 localPos = Vector3.zero;public Vector3 localRos = Vector3.zero;public Vector3 localScale = Vector3.zero;
}public class ModelInfoRoot
{public List<ModelInfo> ModelInfos = new List<ModelInfo>();//属性需要初始化
}

1.1生成的json数据

{"ModelInfos": [{"Name": "Cube","localPos": {"x": 0.0,"y": 0.0,"z": 0.0},"localRos": {"x": 0.0,"y": 0.0,"z": 0.0},"localScale": {"x": 1.0,"y": 1.0,"z": 1.0}},{"Name": "Cube (1)","localPos": {"x": 100.0,"y": 0.0,"z": 0.0},"localRos": {"x": 0.0,"y": 0.0,"z": 0.0},"localScale": {"x": 1.0,"y": 1.0,"z": 1.0}},{"Name": "Cube (2)","localPos": {"x": 0.0,"y": 0.0,"z": 100.0},"localRos": {"x": 0.0,"y": 0.0,"z": 0.0},"localScale": {"x": 1.0,"y": 1.0,"z": 1.0}}]
}

二、加载json文件

using System.Collections;
using System.IO;
using UnityEngine;
using UnityEngine.Networking;public class LoadJson : MonoBehaviour
{[SerializeField]private GameObject cube = null;private void Start(){StartCoroutine(IELoadJson());}IEnumerator IELoadJson(){var vpath = Path.Combine(Path.Combine(Application.streamingAssetsPath, "Config"), "ModelInfo.json");var www = UnityWebRequest.Get(vpath);yield return www.SendWebRequest();if (www.result == UnityWebRequest.Result.ConnectionError || www.result == UnityWebRequest.Result.DataProcessingError || www.result == UnityWebRequest.Result.ProtocolError){Debug.Log(www.error);}else{var vhandler = www.downloadHandler;ModelInfoRoot modelInfoRoot = JsonUtility.FromJson<ModelInfoRoot>(vhandler.text);if (modelInfoRoot.ModelInfos.Count > 0){foreach (var v in modelInfoRoot.ModelInfos){var vcube = Instantiate(cube, transform);vcube.name = v.Name;vcube.transform.localPosition = v.localPos;vcube.transform.localEulerAngles = v.localRos;vcube.transform.localScale = v.localScale;}}}}
}

unity创建与解析json相关推荐

  1. Android手动创建和解析Json

    Android手动创建和解析Json 概述 现在Android开发中创建和解析Json大都是利用Gson.fastJson等可以映射对象的第三方库,确实非常方便,使用Gson解析可以参考我的另一篇文章 ...

  2. cjson 对象是json数组型结构体_cJSON创建并解析json结构体 | 学步园

    cJSON 对于cJSON的使用,我主要是用来模拟远程服务器端返回的一个json类型的目录结构,客户端进行获取并进行解析,把解析出来的目录按照原本的结构显示在本地. cJSON简介 cJSON是一个超 ...

  3. C/C++程序开发: cJSON的使用(创建与解析JSON数据)

    一.cJSON介绍 cJSON 是一个超轻巧,携带方便,单文件,可以作为 ANSI-C 标准的 JSON 解析器,是一个用C语言编写的简单好用的JSON解析器:它只包含一个C文件和一个头文件,可以非常 ...

  4. 介绍Jackson JsonParser解析json

    介绍Jackson JsonParser解析json 前文介绍了通过JsonNode解析json,本文深入底层工具JsonParser的用法. 1. 概述 实际应用中经常需要解析json数据,如查询N ...

  5. Android利用Gson解析Json数据

    其实,要创建和解析JSON数据,也可以使用GSON来完成.GSON是Google提供的用来在Java对象和JSON数据之间进行映射的Java类库.使用GSON,可以很容易的将一串JSON数据转换为一个 ...

  6. unity解析json 数据

    1.使用JsonUtility解析 JsonUtility是unity自带的解析json的工具. 1.1具体使用创建一个解释数据的对象类 需要注意的是需要将每一个方法序列化,使用[System.Ser ...

  7. json数组 js html标签,JS 实现创建HTML标签及解析Json

    创建标签 var tbody = document.getElementById("myTbody"); var tr1 = document.createElement(&quo ...

  8. 常用的三种数据库创建存储过程并解析json

    此文章包含MySQL.Oracle和Sql Server这三种数据库的创建json格式入参并解析的主子表存储 文章目录 此文章包含MySQL.Oracle和Sql Server这三种数据库的创建jso ...

  9. Unity使用JsonFx进行JSON (反)序列

    0. 背景 Unity作为客户端要与服务端通信,最为简单通信协议就是使用Json格式.本文简单讲述Unity使用JsonFx进行Json(反)序列. 序列和反序列是一个互为逆反的过程.反序列化可以帮助 ...

最新文章

  1. Codeforces Round #359 (Div. 2) C. Robbers' watch 暴力枚举
  2. 用备份控制文件做不完全恢复下的完全恢复(数据文件备份旧--新建表空间--控制文件备份次新--日志归档文件新)...
  3. 并发下HashMap头插会造成死循环情况说明
  4. docker容器内访问外部mysql_详解Docker容器内应如何访问本机(宿主机)
  5. 常见 Java 字节码 指令 助记符
  6. 计算机图形学考研学校深圳大学,厉害了!深大计算机图形学在亚洲排第三!
  7. 二叉树的递归遍历算法c语言 数据结构,递归创建二叉树c语言实现+详细解释
  8. 【图像融合】图像融合质量评价方法的研究
  9. win10鼠标右键拓展(使用vs Code打开)
  10. 无线路由器的DNS服务器怎么设置,无线路由器DNS的设置方法
  11. 第五章---面向对象---小练习
  12. java 获取当前月的第一天和最后一天
  13. 一周热图|何穗俞飞鸿张翰南京出席活动;华为全球最大旗舰店开业;巴黎欧莱雅公布凯瑟琳·兰福德为全球代言人...
  14. Promise优缺点
  15. Android的屏幕适配
  16. 714. [C++]买卖股票的最佳时机含手续费
  17. easyExcel设置单个单元格(颜色)样式
  18. 2.1 SSD算法理论
  19. AMR SLAM ROS入门——前言
  20. ACL原理和作用,ACL类型和特点,ACL匹配和通配符使用

热门文章

  1. Linux 下编译 VLC
  2. thinkphp框架源码交易系统资源网站源码
  3. DAPP实现Metamask自动添加网络和切换网络
  4. tensorfow/model下object_detection训练错误记录
  5. 2012年第三届蓝桥杯试题(C/C++本科B组)
  6. P3400 仓鼠窝 (单调栈 dp
  7. 【五月集训】—— 汇聚星球,算法锤炼,集中一点,登峰造极
  8. m文件关联matlab,matlab关联m文件
  9. 亚马逊、eBay、速卖通、lazada、Shopee等跨境平台,如何快速打造爆款
  10. 平安云:在群雄逐鹿的云市场中野蛮生长