【Lua】JSON字符串读写类

lua中使用代码:

local json = JsonDataLua();–创建json
json:Add(“id”,1111);–添加节点,节点值
local js=json:ToJson();–转为string格式
local json = JsonDataLua.Parse(str);–读取json
local value =json:getString(“flg”);–根据节点读取节点值
local id = json:getInt(“id”);–读取int格式

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using UnityEngine;
using LitJson;
/// 
/// @pxd
/// 
namespace util
{
    /// 
    /// 建议在Lua下使用
    /// 
    public class JsonDataLua : JsonData
    {
        JsonDataLua json = null;
        private bool isAdd = false;
        public JsonDataLua()
        {
        }
        private JsonDataLua(JsonData data)
        {
            this.Add(data);
            isAdd = true;
        }
        public static JsonDataLua Parse(string _str)
        {
            //parentJsonDataLua = LitJson.JsonMapper.ToObject(_str);
            JsonDataLua json = new JsonDataLua(JsonMapper.ToObject(_str));
            //json.Add(LitJson.JsonMapper.ToObject(_str));
            return json;            
        }        
        public int getInt(string name)
        {
            return (int)this[0][name];
        }
        public string getString(string name)
        {
            return (string)this[0][name];
        }
        public float getFloat(string name)
        {
            return (float)this[0][name];
        }
        public double getDouble(string name)
        {
            return (double)this[0][name];
        }
        public object get(string name)
        {
            return this[0][name];
        }
        //public object[] getArray(string name)
        //{
        //    object[] arr = null;
        //    JsonData jd = this[0][name];
        //    if(jd.IsArray)
        //    {
        //        int i = 0;
        //        arr = new object[jd.Count];
        //        foreach(JsonData o in jd)
        //        {
        //            JsonDataLua json = new JsonDataLua(o);
        //            arr[i] = json;
        //        }
        //    }
        //    return arr;
        //}
        public JsonDataLua[] getArray(string name)
        {
            JsonDataLua[] arr = null;
            JsonData jd = this[0][name];
            if (jd.IsArray)
            {
                arr = new JsonDataLua[jd.Count];
                for (int i = 0; i < jd.Count; i++)
                {
                    JsonDataLua json = new JsonDataLua(jd[i]);
                    arr[i] = json;
                }
            }
            return arr;
        }

        public string ToJson()
        {
            if(isAdd)
            {
                return base[0].ToJson();
            }
            return base.ToJson();
        }

        public JsonDataLua getJsonDataLua(string name)
        {
            return new JsonDataLua(this[0][name]);
        }
        //==========================Add=====================/
        public void Add(string key,string value)
        {
            this[key] = value;
        }
        public void Add(string key, int value)
        {
            this[key] = value;
        }
        public void Add(string key, float value)
        {
            this[key] = value;
        }
        public void Add(string key, double value)
        {
            this[key] = value;
        }
        public void Add(string key,object[] objs)
        {
            JsonData jd = new JsonData();
            foreach(object o in objs)
            {
                jd.Add(o);
            }
            this[key] = jd;
        }
    }
}

使用:

	Http.doGet(“地址",this.self,function(str)
	--登录过程
		--str:来自c#服务器字符串,有时需要把前面三个不知名的内容截取掉
		str=string.sub(str,4);
		--print("解密前",str);
		--解密
		str=EncryptDecrypt.DecryptString(str);
		--print("解密后",str);
		--解析Json字符
		local json = JsonDataLua.Parse(str);--转为json格式
		local value =json:getString("flg");--读取string格式flg
		--print(value);
		if(value=="ok") then
			local p = user.sharePlayer();
			p.Id = json:getString("userName");
			p.Name = json:getString("chinaName");
			p.Pic  = json:getString("imgUrl");
			p.Money = json:getInt("money");
			
			local p1=json:getString("hashCodePasword");
			EncryptDecrypt.EncryptDecryptKey=p1;
			print("玩家:"..p.Id,p.Name.."登录成功");
			
			--CS.LuaCallUnity.LoadScene("GameHall");
			CS.UnityEngine.SceneManagement.SceneManager.LoadScene("GameHall");
		else
			print(value);
		end
	end);

读取数组

	local files =json0:getArray("files");
	print(files);
	
	local value1 =files[0]:getString("serverDownpath");

你可能感兴趣的:(lua)