json:

---------------------------------

{
    "name":"中国",
    "province":[
        {
            "name":"黑龙江",
            "cities":{
                "city":[
                    "哈尔滨",
                    "大庆"
                ]
            }
        },
        {
            "name":"广东",
            "cities":{
                "city":[
                    "广州",
                    "深圳",
                    "珠海"
                ]
            }
        },
        {
            "name":"台湾",
            "cities":{
                "city":[
                    "台北",
                    "高雄"
                ]
            }
        },
        {
            "name":"新疆",
            "cities":{
                "city":[
                    "乌鲁木齐"
                ]
            }
        }
    ]
}

--------------------------------

public class JsonDeserialize
{
protected string url = "http://localhost:8080/AssetBundleData/Web/Singlea/";
}
using UnityEngine;
using System.Collections.Generic; public class ChinaJsonDeserialize : JsonDeserialize
{
private China _china; public China china
{
get
{
return _china;
}
} public ChinaJsonDeserialize(string jsonData)
{
_china = new China();
ParseJson(jsonData);
} void ParseJson(string jsonData)
{ if (string.IsNullOrEmpty(jsonData))
{
Debug.LogError("ChinaJson is null or empty");
return;
} Dictionary<string, object> jsonObjects = MiniJSON.Json.Deserialize(jsonData) as Dictionary<string, object>;
_china.chinaName = jsonObjects["name"].ToString();
_china.province = new List<Province>(); List<object> provinceList = jsonObjects["province"] as List<object>; foreach (var i in provinceList)
{
Dictionary<string, object> province = i as Dictionary<string, object>;
Province provinceObj = new Province();
provinceObj.provinceName = province["name"].ToString();
provinceObj.city = new List<City>(); Dictionary<string, object> citesDic = province["cities"] as Dictionary<string, object>; List<object> childCitesList = citesDic["city"] as List<object>;
foreach (var childCity in childCitesList)
{
City city = new City();
city.cityName = childCity.ToString(); provinceObj.city.Add(city);
} _china.province.Add(provinceObj);
}
}
} public class China
{
public string chinaName;
public List<Province> province;
} public class Province
{
public string provinceName;
public List<City> city;
} public class City
{
public string cityName;
}
using UnityEngine;
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Text; namespace MiniJSON { public static class Json {
/// <summary>
/// Parses the string json into a value
/// </summary>
/// <param name="json">A JSON string.</param>
/// <returns>An List<object>, a Dictionary<string, object>, a double, an integer,a string, null, true, or false</returns>
public static object Deserialize(string json) {
// save the string for debug information
if (json == null) {
return null;
} return Parser.Parse(json);
} sealed class Parser : IDisposable {
const string WHITE_SPACE = " \t\n\r";
const string WORD_BREAK = " \t\n\r{}[],:\""; enum TOKEN {
NONE,
CURLY_OPEN,
CURLY_CLOSE,
SQUARED_OPEN,
SQUARED_CLOSE,
COLON,
COMMA,
STRING,
NUMBER,
TRUE,
FALSE,
NULL
}; StringReader json; Parser(string jsonString) {
json = new StringReader(jsonString);
} public static object Parse(string jsonString) {
using (var instance = new Parser(jsonString)) {
return instance.ParseValue();
}
} public void Dispose() {
json.Dispose();
json = null;
} Dictionary<string, object> ParseObject() {
Dictionary<string, object> table = new Dictionary<string, object>(); // ditch opening brace
json.Read(); // {
while (true) {
switch (NextToken) {
case TOKEN.NONE:
return null;
case TOKEN.COMMA:
continue;
case TOKEN.CURLY_CLOSE:
return table;
default:
// name
string name = ParseString();
if (name == null) {
return null;
} // :
if (NextToken != TOKEN.COLON) {
return null;
}
// ditch the colon
json.Read(); // value
table[name] = ParseValue();
break;
}
}
} List<object> ParseArray() {
List<object> array = new List<object>(); // ditch opening bracket
json.Read(); // [
var parsing = true;
while (parsing) {
TOKEN nextToken = NextToken; switch (nextToken) {
case TOKEN.NONE:
return null;
case TOKEN.COMMA:
continue;
case TOKEN.SQUARED_CLOSE:
parsing = false;
break;
default:
object value = ParseByToken(nextToken); array.Add(value);
break;
}
} return array;
} object ParseValue() {
TOKEN nextToken = NextToken;
return ParseByToken(nextToken);
} object ParseByToken(TOKEN token) {
switch (token) {
case TOKEN.STRING:
return ParseString();
case TOKEN.NUMBER:
return ParseNumber();
case TOKEN.CURLY_OPEN:
return ParseObject();
case TOKEN.SQUARED_OPEN:
return ParseArray();
case TOKEN.TRUE:
return true;
case TOKEN.FALSE:
return false;
case TOKEN.NULL:
return null;
default:
return null;
}
} string ParseString() {
StringBuilder s = new StringBuilder();
char c; // ditch opening quote
json.Read(); bool parsing = true;
while (parsing) { if (json.Peek() == -1) {
parsing = false;
break;
} c = NextChar;
switch (c) {
case '"':
parsing = false;
break;
case '\\':
if (json.Peek() == -1) {
parsing = false;
break;
} c = NextChar;
switch (c) {
case '"':
case '\\':
case '/':
s.Append(c);
break;
case 'b':
s.Append('\b');
break;
case 'f':
s.Append('\f');
break;
case 'n':
s.Append('\n');
break;
case 'r':
s.Append('\r');
break;
case 't':
s.Append('\t');
break;
case 'u':
var hex = new StringBuilder(); for (int i=0; i< 4; i++) {
hex.Append(NextChar);
} s.Append((char) Convert.ToInt32(hex.ToString(), 16));
break;
}
break;
default:
s.Append(c);
break;
}
} return s.ToString();
} object ParseNumber() {
string number = NextWord; if (number.IndexOf('.') == -1) {
long parsedInt;
Int64.TryParse(number, out parsedInt);
return parsedInt;
} double parsedDouble;
Double.TryParse(number, out parsedDouble);
return parsedDouble;
} void EatWhitespace() {
while (WHITE_SPACE.IndexOf(PeekChar) != -1) {
json.Read(); if (json.Peek() == -1) {
break;
}
}
} char PeekChar {
get {
return Convert.ToChar(json.Peek());
}
} char NextChar {
get {
return Convert.ToChar(json.Read());
}
} string NextWord {
get {
StringBuilder word = new StringBuilder(); while (WORD_BREAK.IndexOf(PeekChar) == -1) {
word.Append(NextChar); if (json.Peek() == -1) {
break;
}
} return word.ToString();
}
} TOKEN NextToken {
get {
EatWhitespace(); if (json.Peek() == -1) {
return TOKEN.NONE;
} char c = PeekChar;
switch (c) {
case '{':
return TOKEN.CURLY_OPEN;
case '}':
json.Read();
return TOKEN.CURLY_CLOSE;
case '[':
return TOKEN.SQUARED_OPEN;
case ']':
json.Read();
return TOKEN.SQUARED_CLOSE;
case ',':
json.Read();
return TOKEN.COMMA;
case '"':
return TOKEN.STRING;
case ':':
return TOKEN.COLON;
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
case '-':
return TOKEN.NUMBER;
} string word = NextWord; switch (word) {
case "false":
return TOKEN.FALSE;
case "true":
return TOKEN.TRUE;
case "null":
return TOKEN.NULL;
} return TOKEN.NONE;
}
}
} /// <summary>
/// Converts a IDictionary / IList object or a simple type (string, int, etc.) into a JSON string
/// </summary>
/// <param name="json">A Dictionary<string, object> / List<object></param>
/// <returns>A JSON encoded string, or null if object 'json' is not serializable</returns>
public static string Serialize(object obj) {
return Serializer.Serialize(obj);
} sealed class Serializer {
StringBuilder builder; Serializer() {
builder = new StringBuilder();
} public static string Serialize(object obj) {
var instance = new Serializer(); instance.SerializeValue(obj); return instance.builder.ToString();
} void SerializeValue(object value) {
IList asList;
IDictionary asDict;
string asStr; if (value == null) {
builder.Append("null");
}
else if ((asStr = value as string) != null) {
SerializeString(asStr);
}
else if (value is bool) {
builder.Append(value.ToString().ToLower());
}
else if ((asList = value as IList) != null) {
SerializeArray(asList);
}
else if ((asDict = value as IDictionary) != null) {
SerializeObject(asDict);
}
else if (value is char) {
SerializeString(value.ToString());
}
else {
SerializeOther(value);
}
} void SerializeObject(IDictionary obj) {
bool first = true; builder.Append('{'); foreach (object e in obj.Keys) {
if (!first) {
builder.Append(',');
} SerializeString(e.ToString());
builder.Append(':'); SerializeValue(obj[e]); first = false;
} builder.Append('}');
} void SerializeArray(IList anArray) {
builder.Append('['); bool first = true; foreach (object obj in anArray) {
if (!first) {
builder.Append(',');
} SerializeValue(obj); first = false;
} builder.Append(']');
} void SerializeString(string str) {
builder.Append('\"'); char[] charArray = str.ToCharArray();
foreach (var c in charArray) {
switch (c) {
case '"':
builder.Append("\\\"");
break;
case '\\':
builder.Append("\\\\");
break;
case '\b':
builder.Append("\\b");
break;
case '\f':
builder.Append("\\f");
break;
case '\n':
builder.Append("\\n");
break;
case '\r':
builder.Append("\\r");
break;
case '\t':
builder.Append("\\t");
break;
default:
int codepoint = Convert.ToInt32(c);
if ((codepoint >= 32) && (codepoint <= 126)) {
builder.Append(c);
}
else {
builder.Append("\\u" + Convert.ToString(codepoint, 16).PadLeft(4, '0'));
}
break;
}
} builder.Append('\"');
} void SerializeOther(object value) {
if (value is float
|| value is int
|| value is uint
|| value is long
|| value is double
|| value is sbyte
|| value is byte
|| value is short
|| value is ushort
|| value is ulong
|| value is decimal) {
builder.Append(value.ToString());
}
else {
SerializeString(value.ToString());
}
}
}
}
}

Unity3D中使用MiniJson解析json的例子的更多相关文章

  1. Android中使用Gson解析JSON数据的两种方法

    Json是一种类似于XML的通用数据交换格式,具有比XML更高的传输效率;本文将介绍两种方法解析JSON数据,需要的朋友可以参考下   Json是一种类似于XML的通用数据交换格式,具有比XML更高的 ...

  2. 转:JS中生成和解析JSON

    原文地址:JS中生成和解析JSON 1.JS中生成JSON对象的方法: var json = []; var row1 = {}; row1.id= "1"; row1.name ...

  3. Android中使用Gson解析JSON数据

      Android中使用Gson解析JSON数据 在Android中可以使用Gson解析JSON数据 首先,从 code.google.com/p/google-gson/downloads/list ...

  4. Scala中使用fastJson 解析json字符串

    Scala中使用fastJson 解析json字符串 添加依赖 2.解析json字符 2.1可以通过JSON中的parseObject方法,把json字符转转换为一个JSONObject对象 2.2然 ...

  5. 使用QtScript库解析Json数组例子

    本文转载自:http://blog.sina.com.cn/s/blog_671732440100uwxh.html 使用qtscipt库解析json数组首先在工程文件中加 QT        += ...

  6. Delphi中使用ISuperObject解析Json数据

    Java.Php等语言中都有成熟的框架来解析Json数据,可以让我们使用很少的代码就把格式化好的json数据转换成程序可识别的对象或者属性,同时delphi中也有这样的组件来实现此功能,即Isuper ...

  7. JS中生成和解析JSON

    1.JS中生成JSON对象的方法: var json = []; var row1 = {}; row1.id= "1"; row1.name = "jyy"; ...

  8. 在Unity中使用LitJson解析json文件

    LitJson 这个库需要找资源,找到LitJson.dll后将它放在Assets文件夹下,在脚本中使用using引入即可 测试代码 json文件: {"Archice":[{&q ...

  9. Qt简单的解析Json数据例子(一)

    要解析的json的格式为: { "rootpath": "001", "usernum": 111, "childdep" ...

随机推荐

  1. Hibernate实体映射配置(XML)简单三步完美配置

    我们在使用Hibernate框架的时候,非常纠结的地方就是实体和表之间的映射,今天借助汤老师的思路写了小教程,以后配置不用纠结了! 第一步:写注释 格式为:?属性,表达的是本对象与?的?关系. 例:“ ...

  2. 给phpcms v9加入一个主题radio无线电button,它可反复使用,以创建不同的专题部分内容编辑器,添加一个主题来定义自己的领域

    1. 2. 找到 phpcms\modules\special\templates中的special_add.tpl.php和special_edit.tpl.php文件 special_add.tp ...

  3. C语言与sqlserver数据库

    原文:C语言与sqlserver数据库 1.使用C语言来操作SQL SERVER数据库,采用ODBC开放式数据库连接进行数据的添加,修改,删除,查询等操作. step1:启动SQLSERVER服务,例 ...

  4. PHP 3:从Login界面谈PHP标记

    原文:PHP 3:从Login界面谈PHP标记 前一篇文章简要介绍了此实例.OK,我们就从第一个页面Login页面入手吧.还是看看界面怎么样,是不是很想指导它到底是如何实现的呢?好的,看看其代码吧: ...

  5. SQL点滴19—T-SQL中的透视和逆透视

    原文:SQL点滴19-T-SQL中的透视和逆透视 透视 今天抽一点时间来看看透视和逆透视语句,简单的说就是行列转换.假设一个销售表中存放着产品号,产品折扣,产品价格三个列,每一种产品号可能有多种折扣, ...

  6. 编程乐趣:C#获取日期所在周、月份第一和最后一天

    原文:编程乐趣:C#获取日期所在周.月份第一和最后一天 写了个小功能,需要用到以周为时间段,于是写了个获取周第一和最后一天的方法,获取月份的第一和最后一天就比较简单了.代码如下: public cla ...

  7. Visual Studio 单元测试之二---顺序单元测试

    原文:Visual Studio 单元测试之二---顺序单元测试 此文是上一篇博文:Visual Studio 单元测试之一---普通单元测试的后续篇章.如果读者对Visual Studio的单元测试 ...

  8. Scala Web 框架——Lift(一)准备工作

    [Lift]Scala Web 框架——Lift(一)准备工作 Lift 官方网站:http://liftweb.net/ 下载 http://liftweb.net/download 下载.zip压 ...

  9. Dev环境中的集成测试用例执行时上下文环境检查(实战)

    Dev环境中的集成测试用例执行时上下文环境检查(实战) Microsoft.NET 解决方案,项目开发必知必会. 从这篇文章开始我将分享一系列我认为在实际工作中很有必要的一些.NET项目开发的核心技术 ...

  10. android中怎么调整字体的间距和行间距

    在网页中都是很轻松的就可以调整间距的.在android中,我个人并没有去设置过. 下面就来说说android中的间距问题. 原文:http://blog.csdn.net/fancylovejava/ ...