关于这几种语言的json 操作

Lua

local cjson2 = require "cjson"
local lua_object = {
["name"] = "Jiang",
["age"] = 24,
["addr"] = "BeiJing",
["email"] = "1569989xxxx@126.com",
["tel"] = "1569989xxxx"
}
local tmp = cjson2.encode(lua_object)
print(obj["age"])
function Utils:ParseJson( json )
if not json or #json < 2 then--两端{}
return
end
local err,data = pcall(function(json)return cjson.decode(json)end,json);
if err == false then
data = nil;
end return data;
end

C#  JsonUtility

class Person {
public int age;
public string name;
} private void Awake(){
Person p = new Person();
p.age = 20;
p.name = "zhang san";
string json = JsonUtility.ToJson(p, true);
Debug.Log(json);
var re = JsonUtility.FromJson<Person>(json);
Debug.Log(re.age.ToString() + "-------------------");
}

//如果json的key比对象的字段多也可以正常解析
//string json = "{\"addr\": \"BeiJing\",\"tel\": \"1569989xxxx\",\"age\": 24,\"name\": \"Jiang\",\"email\": \"1569989xxxx@126.com\"}";

C#  Newtonsoft.Json 上面的如果lua 加了个字段给java,在C#有使用能解析(主要是要申明一个类,其实如果需求在这里变了,改C#不能热更,策划应该能接受)

Newtonsoft是比较原始的字典,不用声明一个类

        Dictionary<string, object> dic = new Dictionary<string, object>();
dic["age"] = 25;
dic["name"] = "张三";
var item = JsonConvert.SerializeObject(dic);
Debug.Log(item); var tmp = JsonConvert.DeserializeObject<Dictionary<string, object>>(item);
Debug.Log(tmp["name"].ToString());

Java In Android   import org.json.JSONObject

        try{
JSONObject jsonObject1 = new JSONObject();
jsonObject1.put("name","zhangsan");
jsonObject1.put("age",12);
String tmp = jsonObject1.toString();
Log.i("LogLogLog",tmp);
JSONObject js2 = new JSONObject(tmp);
String name = js2.getString("name");
Log.i("namenamenamename",name);
} catch (Exception e) { }
JSONObject jsonObject = new JSONObject(str);
Iterator<String> it = jsonObject.keys();
while(it.hasNext()){
// 获得key
String key = it.next();
String value = jsonObject.getString(key);
System.out.println("key: "+key+",value:"+value);}

Object-C In iOS

+ (NSDictionary *)dictionaryWithJsonString:(NSString *)jsonString
{
if (jsonString == nil) {
return nil;
} NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
NSError *err;
NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:jsonData
options:NSJSONReadingMutableContainers
error:&err];
if(err)
{
NSLog(@"json解析失败:%@",err);
return nil;
}
return dic;
}
+ (NSString *)jsonStringWithDict:(NSDictionary *)dict {
NSError *error;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dict options:NSJSONWritingPrettyPrinted error:&error];
NSString *jsonString;
if (!jsonData) {
NSLog(@"%@",error);
}else{
jsonString = [[NSString alloc]initWithData:jsonData encoding:NSUTF8StringEncoding];
}
return jsonString;
}

这样再也不怕用户取一些怪名字了。

在C#编辑器中 直接书写json

        string json = @"{""succ"":true,""content"":""hah""}";
Dictionary<string, object> jDic = MiniJSON.Json.Deserialize(json) as Dictionary<string, object>; Debug.Log(jDic["succ"]);
Debug.Log(jDic["content"]);

Java 中编写

String json = "{\"succ\":true,\"content\":\"hah\"}";

Log.e("json",json);

OC中编写

NSString  *json = @"{\"succ\":true,\"content\":\"hah\"}"

  在Unity 中使用Json 各种的复杂的类型都是支持的 不支持字典类型  Dictionary<>

using System;
using System.Collections;
using System.Collections.Generic;
using System.Runtime.Serialization;
using System.Web;
using UnityEngine;
using UnityEngine.Networking; public class LearnSharp : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{ string json = @"{
""d"": ""dfff"",
""album"": {
""cc"": ""cc"",
""name"": ""The Dark Side of the Moon"",
""artist"": ""Pink Floyd"",
""year"": 1973,
""tracks"": [
""Speak To Me"",
""Breathe"",
""On The Run""
],
""tt"": ""tt"",
""tracksOb"": [{
""trackOb"": ""11"",
""trackObddf"": ""11""
},
{
""trackOb"": ""22""
}
],
""bb"": ""bb""
}
}";
var obj = GetData2<Root>(json); Debug.Log(obj.ToString());
} public static T GetData2<T>(string text) where T : class
{
//JsonData table = AnalysisJson.Analy<JsonData>(text);
T t = JsonUtility.FromJson<T>(text);
return t;
}
} [Serializable]
public class TracksObItem
{
public string trackOb;
public string newVar;
public override string ToString()
{
string name = "";
return $"{trackOb} {trackOb} ";
} public void OnDeserialization(object sender)
{
Debug.Log("OnDeserialization");
} } [Serializable]
public class Album
{
public string cc;
public string name;
public string artist;
public int year;
public List<string> tracks;
public string tt;
public List<TracksObItem> tracksOb;
public string bb;
} [Serializable]
public class Root
{
public string d;
public Album album; public override string ToString()
{
string name = "";
return $"{d} {album.name} {album.tracks[1]} {album.tracksOb[1].trackOb} {album.tracksOb[1].newVar}";
}
}

  这个是例子,感觉功能很强大。数组多层嵌套都支持。

                  

最新文章

  1. poj 1141
  2. 当 IDENTITY_INSERT 设置为 OFF 时,不能向表 &#39;#TT&#39; 中的标识列插入显式值。 sql server 临时表
  3. [翻译]:SQL死锁-死锁排除
  4. KD Tree算法
  5. nohup DEMO
  6. 反演dp经典
  7. lintcode :二叉树的最大深度
  8. altium designer 里如何设置PCB默认字符默认大小(PCB丝印)
  9. bzoj1016
  10. ios 设置屏幕方向的两种方法
  11. Problem of Uninstall Cloudera: Can&#39;t Add Hdfs and Reported Cannot Find CDH&#39;s bigtop-detect-javahome
  12. ios自定义数字键盘
  13. java 二进制数字符串转换工具类
  14. Useful Git Commands for me
  15. Springboot(一)概念
  16. 假设程序需要一个int类型的变量来保持你所有的音乐CD的数量
  17. 移动端1px问题
  18. 最小化安装CentOS 7后,图形界面的安装(GNOME、KDE等)
  19. Font Awesome(一套很棒的图标库)
  20. Ubuntu下Ruby的下载和编译源码安装

热门文章

  1. laravel service provider 1
  2. java和js 用正则表达式切割省市县的代码
  3. 吴恩达老师机器学习课程chapter05——评估模型
  4. 淘淘商城项目技术点-9:使用FTPClient及FtpUtil工具类将图片上传至ngnix图片服务器
  5. 微信防红页面JS代码
  6. 【Python】Python多进程练习
  7. 怎么在Windows系统中制作Mac系统U盘启动盘?
  8. ubuntu 系统增加源和删除源文件
  9. MySQL日期/时间函数
  10. swoole的使用场景