关于这几种语言的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}";
    }
}

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

 

 

 

 

 

 

 

 

                  

 posted on 2021-11-04 14:40  1039781968  阅读(49)  评论(1编辑  收藏  举报