数据的本地存储——Json
来源:互联网 发布:采购平台软件 编辑:程序博客网 时间:2024/05/16 03:42
Json的操作和解析:
有两种方式:1、unity5.3之后自带的JSonUtility类库;2、第三方插件LitJSon库。
在unity中创建一个空物体,给空物体加一个脚本如图:
编辑脚本:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
/// <summary>
/// Unity自带的JSonUtility
/// </summary>
public class JsonUtilityDemo : MonoBehaviour {
void Start () {
//1、JsonUtility类库:
//使用代码方式创建一个Json
//例如这样的:{ 'name':'宝宝','age':18} 单引号、双引号都行
Person p1 =new Person();
p1.name ="宝宝";
p1.age = 18;
//转成JSon字符串
string jsonStr = JsonUtility.ToJson(p1);
//Debug.Log(jsonStr); //{ "name":"宝宝","age":18}
//再例如这样的:{"Persons":{["name":"宝宝","age":18],["name":"小杰","age":16]}}
Person p2 =new Person();
p2.name ="小杰";
p2.age = 16;
Person[] ps =new Person[] { p1, p2 };
Persons psons =new Persons();
psons.persons = ps;
jsonStr = JsonUtility.ToJson(psons);
//Debug.Log(jsonStr); //{"persons":[{"name":"宝宝","age":18},{"name":"小杰","age":16}]}
//解析JSon(看传过来的JSon结构,根据JSon结构构造相应的类)
//比如上面的jsonStr="{"persons":[{"name":"宝宝","age":18},{"name":"小杰","age":16}]}"
//需要一个persons类,包含person数组,person数组有两个元素,这里已经创建了这两个类
Persons newPerson = JsonUtility.FromJson<Persons>(jsonStr);
Debug.Log(newPerson.persons[0].name); //宝宝
}
}
/// <summary>
/// Person类
/// unity自带的JsonUtility需要的序列化
/// 这样可以和JSon相互转化
/// </summary>
[Serializable]
public class Person
{
public string name;
public int age;
}
[Serializable]
public class Persons
{
public Person[] persons;
}
2、使用第三方插件LitJSon来创建与解析JSon
下载LitJSon的.dll文件,将dll文件放在Plugins文件夹下,如图:
编辑代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using LitJson;//LitJson命名空间
using System;
/// <summary>
/// 利用第三方插件LitJSon来创建与解析JSon
/// </summary>
public class LitJsonDemo : MonoBehaviour {
void Start () {
//有两种方法创建和解析JSon:
// Function1();
// Function2();
Analytic();
}
void Function1()
{
//创建JSon(和unity自带的JSonUtility创建相同)
//比如{"Heros":[{"name":"超人","power":18},{"name":"蝙蝠侠","power":16}]}
//则先创建符合该类型的类,再创建类的对象
Hero hero1 =new Hero();
hero1.name ="超人";
hero1.power = 18;
Hero hero2 =new Hero();
hero2.name ="蝙蝠侠";
hero2.power = 16;
Hero[] hero =new Hero[] { hero1, hero2 };
Heros hrs =new Heros();
hrs.heros = hero;
string jsonStr = JsonMapper.ToJson(hrs);
//Debug.Log(jsonStr); //打印出中文是UTF8编码,不用管,取出则为正常
//解析JSon 泛型
Heros newHero = JsonMapper.ToObject<Heros>(jsonStr);
//Debug.Log(newHero.heros[1].name); //蝙蝠侠
}
void Function2()
{
//创建JSon
//比如{"name":"超人","power":18}或者{"heros":[{"name":"超人","power":18},{"name":"蝙蝠侠","power":16}]}
//不需要创建类直接创建JSon
//1、创建类似这样简单的JSon{ "name":"超人","power":18}
JsonData creatJsonData =new JsonData(); //JSonData即代表{}也代表[]
//设置JSon类型 如果像这样的一眼可以看出的{"name":"超人","power":18},也可以不需要指定类型,系统会自动识别
//creatJsonData.SetJsonType(JsonType.Object);
creatJsonData["name"] ="超人";
creatJsonData["power"] = 18;
string json = creatJsonData.ToJson();
//Debug.Log(json);
//2、创建类似这样复杂一点的JSon{ "heros":[{"name":"超人","power":18},{"name":"蝙蝠侠","power":16}]}
JsonData herosJsonData =new JsonData(); //{}代表最外层花括号
JsonData heroJsonData1 =new JsonData(); //{}内层花括号
heroJsonData1["name"] ="超人";
heroJsonData1["power"] = 18;
JsonData heroJsonData2 =new JsonData(); //{}内层花括号
heroJsonData2["name"] ="蝙蝠侠";
heroJsonData2["power"] = 16;
JsonData heros =new JsonData(); //[]heros数组
heros.SetJsonType(JsonType.Array);//设置JSon类型
heros.Add(heroJsonData1);
heros.Add(heroJsonData2);
herosJsonData["heros"] = heros;
Debug.Log(herosJsonData.ToJson());
//解析Analytic()
}
//对第二种方案的解析
private void Analytic()
{
string jsonStr="{ 'Heros':[{'name':'超人','power':18},{'name':'蝙蝠侠','power':16}]}";
JsonData herosJson = JsonMapper.ToObject(jsonStr);
JsonData heros = herosJson["Heros"]; //[]
//heros[0]["name"]
//遍历
foreach(JsonData heroJsonin heros)
{
//Debug.Log(heroJson["name"]);
//Debug.Log(heroJson["power"]);
Debug.Log(heroJson["name"].ToString());
Debug.Log((int)heroJson["power"]);
}
}
}
[System.Serializable]
public class Hero
{
public string name;
public int power;
}
[System.Serializable]
public class Heros
{
public Hero[] heros;
}
- 数据的本地存储——Json
- html5之本地存储—JSON对象的使用
- 数据的本地存储
- HTML5 LocalStorage 本地存储JSON数据
- HTML5 LocalStorage 本地存储JSON数据
- HTML5 LocalStorage 本地存储JSON数据
- H5本地存储之存储JSON格式数据
- 【数据存储】——JSON的解析和生成
- 【数据存储】——JSON与XML的对比
- 新手--网络访问的json数据存储在本地文件夹, 离线使用
- angularJs中json数据转换与本地存储
- 如何读取本地的json数据
- iOS学习笔记3—NSKeyedUnarchiver进行本地数据的读取|存储
- 本地存储玩家信息数据——单机、网络游戏必备
- 抓取网页的本地数据存储
- 本地数据存储localStorage的setIte…
- iOS本地数据存储的方式
- 数据本地存储的文件夹及其路径
- 感知机
- web前端学习路径
- wireshark抓包过滤器
- C++自己写的程序中,出现“无法启动(0xc00007b)”的解决方法
- 【webview】android webview 显示空白页问题解决
- 数据的本地存储——Json
- 堆——洛谷 P1484 种树
- json
- C# .net中cookie值为中文时的乱码解决方法
- jquery 对后来生成的js代码的click事件无效
- 错误:org.springframework.orm.jpa.JpaSystemException: could not deserialize;
- hashCode() 和 equals() 的关系
- 3、Java GC机制
- MySQL server has gone away 问题的解决方法