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"
值示例:
我想知道什么是从 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数据是啥意思的主要内容,如果未能解决你的问题,请参考以下文章
JSONArray jsonary = (JSONArray) JSONObject.parse(s); 是啥意思