2016-12-02 61 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中介紹 –