2016-12-02 43 views
1

我想避免导入巨大的库来获得完整的JSON支持。我的用例非常简单:我需要一个解析器来处理JSON的一个特定情况,其中键和值都是字符串,即。 { "name": "David" }。没有嵌套,没有数组,没有对象序列化。从JSON字符串到字典的简单解析器

原因是,我只用i18n使用JSON,而且我的结构翻译文件是扁平的JSON。

  • 手动滚动我自己的解析器是一个好主意吗?
  • 那里有一个吗?
  • 有没有更容易解决我的问题?

编辑:是的,我知道JSON.net是.NET的事实上的解决方案,但它不是Unity的解决方案(本地)。我真的只需要它的一小部分力量。

+0

注意:但我确实需要灵活性,无需为我的JSON对象编写类,这就是为什么我选择Dictionary作为所需输出。 – bitinn

+0

可能的重复[如何将JSON反序列化为简单字典 in ASP.NET?](http://stackoverflow.com/questions/1207731/how-can-i-deserialize-json-to- a-simple-dictionarystring-string-in-asp-net) – bansi

+0

@bansi你能否指出哪个答案适用于我的问题?特别是知道JSON.net本身不支持Unity。 – bitinn

回答

1

好的我找到了! https://github.com/zanders3/json

有体面的测试,最小的功能和可能为我的具体用例而设计。

要加载JSON文件:

Dictionary<string, object> locales = new Dictionary<string, object>(); 

TextAsset file = Resources.Load(name) as TextAsset; 
var locale = file.text.FromJson<object>(); 
locales.Add(name, locale); 

要使用JSON字典:

string activeLocale = "en-US"; 
var locale = locales[activeLocale] as Dictionary<string, object>; 
var translation = locale[key] as string; 

死的简单。

2

System.Json可能会帮你。

JsonValue.Parse()方法解析JSON文本,并返回一个JsonValue

JsonValue value = JsonValue.Parse(@"{ ""name"": ""David"" }"); 

您还可以看看JavaScriptSerializer类是由异步通信层在内部使用序列化和反序列化之间传递的数据浏览器和Web服务器。

var Names = new JavaScriptSerializer().Deserialize<YourNameClass>(json); 
+0

你是对的,JsonValue是足够接近我的情况下,看到这个SO问题更完整的使用JsonValue:http:// stackoverflow。com/questions/9573119/how-to-parse-json-without-json-net-library – bitinn

+0

哦,等待,除了Unity没有System.Json命名空间,因为它是.Net 3.0-ish ... – bitinn

+0

是的它是在4.5中介绍 –