unity3d解析json数据是啥意思

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了unity3d解析json数据是啥意思相关的知识,希望对你有一定的参考价值。

参考技术A json_encode
对中文的处理是有问题的:
不能处理GBK编码,所有的GBK编码都会替换成空字符;
utf8编码的中文被编码成unicode编码,相当于javascript的escape函数
处理的结果。
为了能正确使用json,首先我们就应该在编码上采用utf8编码

解析动态 JSON 数据的最佳方法是啥

【中文标题】解析动态 JSON 数据的最佳方法是啥【英文标题】:What's the best way to parse dynamic JSON data解析动态 JSON 数据的最佳方法是什么 【发布时间】:2022-01-06 07:29:54 【问题描述】:

想象一个方法接受 2 个字符串参数:

public int Method(string expression, string variables)  ... 

"expression" 应该是一个数学。需要评估的表达式(例如“1 + 2”)。如果除了数字和运算符之外还有其他内容,我需要在"variables" 字符串参数中查找variable,以将该变量替换为它所代表的数字。 (不能保证变量是在"variables" 中定义的,但我相信这里并不重要)。

输入示例:

Method("351 + x", " \"x\":69 ");
// Expected output: 420

其他有效"variables" 值示例:

"x":123 "x":123, "y":420 "z":69 "abc": 777

我想知道什么是从 JSON 中解析和检索数据的好方法(每次可能具有不同的结构(即不同数量的属性和名称)),将其与 @ 中的 variable 映射987654330@字符串?

【问题讨论】:

映射到Dictionary<string, object> 或类似的怎么样? @UweKeim 是的,这似乎是一个很好的解决方案。有没有办法做到这一点没有任何 3rd 方库/nuget 包?我正在解决 HackerRank 上的一个问题,但不确定是否可以使用“Newtonsoft.Json” 我什至不敢自己做。 Newtonsoft FTW! 是的,有道理......而且可能有访问该库的权限,但不幸的是我没有检查过。谢谢你的帮助。简单的解决方案,由于某种原因没有想到...您可以将此作为答案发布,因此如果您愿意,我可以接受:) 再次感谢! 这能回答你的问题吗? Is it possible to compile and execute new code at runtime in .NET? 【参考方案1】:

就个人而言,我会选择 Newtonsoft.Json 并使用到 Dictionary<string, object> 的映射:

using Newtonsoft.Json;

public int Method(string expression, string variables) 
 
    var varsDic = 
        JsonHelper.IsValidJson(variables)
            ? JsonConvert.DeserializeObject<Dictionary<string, object>>(variables);
            : new Dictionary<string, object>()

    // ...

Example, documentation.

IsValidJson 是这样的:

public static class JsonHelper

    public static bool IsValidJson(string json)
    
        return IsValidJson(json, out _);
    

    public static bool IsValidJson(string json, out Exception parseError)
    
        if (string.IsNullOrWhiteSpace(json))
        
            parseError = new Exception(Resources.JsonEmpty);
            return false;
        

        json = json.Trim();
        if (json.StartsWith(@"") && json.EndsWith(@"") || //For object
            json.StartsWith(@"[") && json.EndsWith(@"]")) //For array
        
            try
            
                JToken.Parse(json);

                parseError = null;
                return true;
            
            catch (JsonReaderException x)
            
                parseError = x;
                return false;
            
            catch (Exception x)
            
                parseError = x;
                return false;
            
        
        else
        
            parseError = new Exception(Resources.JsonNoStartEnd);
            return false;
        
    

See also.

【讨论】:

JsonConvert.DeserializeObject 包装在try/catch 中比解析两次更好,一次用于检查,另一次用于数据? @AlexeyRumyantsev 是的,这可能会更高效,但另一方面,在现实世界的场景中它可能可以忽略不计。

以上是关于unity3d解析json数据是啥意思的主要内容,如果未能解决你的问题,请参考以下文章

json是啥

JSONArray jsonary = (JSONArray) JSONObject.parse(s); 是啥意思

Unity3d数据存储 PlayerPrefs,XML,Json数据的存储与解析

Unity3D读取数据Json文件操作(创建读取解析修改)

Unity3D读取数据Json文件操作(创建读取解析修改)

C#解析json时,总出现反序列化失败是啥原因解决方案