关于数据传递 json
2024-09-08 18:40:25
关于这几种语言的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}";
}
}
这个是例子,感觉功能很强大。数组多层嵌套都支持。
最新文章
- poj 1141
- 当 IDENTITY_INSERT 设置为 OFF 时,不能向表 &#39;#TT&#39; 中的标识列插入显式值。 sql server 临时表
- [翻译]:SQL死锁-死锁排除
- KD Tree算法
- nohup DEMO
- 反演dp经典
- lintcode :二叉树的最大深度
- altium designer 里如何设置PCB默认字符默认大小(PCB丝印)
- bzoj1016
- ios 设置屏幕方向的两种方法
- Problem of Uninstall Cloudera: Can&#39;t Add Hdfs and Reported Cannot Find CDH&#39;s bigtop-detect-javahome
- ios自定义数字键盘
- java 二进制数字符串转换工具类
- Useful Git Commands for me
- Springboot(一)概念
- 假设程序需要一个int类型的变量来保持你所有的音乐CD的数量
- 移动端1px问题
- 最小化安装CentOS 7后,图形界面的安装(GNOME、KDE等)
- Font Awesome(一套很棒的图标库)
- Ubuntu下Ruby的下载和编译源码安装