如何转换存储JSON文本字符串的不同方式

时间:2019-05-20 19:08:00

标签: c# json unity3d

我正在制作要在WebGL中使用的Unity游戏,我需要将所有游戏对话/文本存储在JSON文件中以进行本地化。我还使用Unity内部的Fungus框架来帮助我建立对话的叙述结构。

该游戏将使用API​​连线到平台,该API可以通过以下方式读取JSON语言文件:语言>键名。

真菌框架使用JSON文件通过以下方式读取对话:键名>语言。

这是真菌框架用于读取存储游戏语言文本的JSON文件的格式。 (我的文件看起来像这样...)

{  
   "string-key-1":{  
      "en":"Text for the 'string-key-1' key",
      "es":"Texto para la llave 'string-key-1'"
   },
   "string-key-2":{  
      "en":"Text or the 'string-key-2' key",
      "es":"Texto para la llave 'string-key-2'"
   }
}

这是门户网站API用来读取存储游戏语言文本的JSON文件的格式。 (我想获取第一个文件并生成一个新的文件,如下所示)

{  
   "en":{  
      "string-key-1":"Text for the 'string-key-1' key",
      "string-key-2":"Text for the 'string-key-2' key"
   },
   "es":{  
      "string-key-1":"Texto para la llave 'string-key-1'",
      "string-key-2":"Texto para la llave 'string-key-2'"
   }
}

有没有办法采用第一种格式(字符串键>语言)并以该格式(语言>字符串键)生成新文件?

1 个答案:

答案 0 :(得分:1)

让我们假设您要输入一个字符串,并希望将其转换为另一个字符串。
这是一种方法:

  1. 将字符串解析为对象(Dictionary<StringKey, Dictionary<Language, Value>>)。
  2. 将嵌套字典转换为{ StrKey, Language, Value }的列表
  3. 按商品语言对列表进行分组
  4. 将结果转换回嵌套字典
  5. 将结果字典序列化为字符串。

所以逐行关注

var resultObject = JsonConvert.DeserializeObject<Dictionary<string, Dictionary<string, string>>>(input)
    .SelectMany(key => key.Value.Select(str => new { StrKey = key.Key, Language = str.Key, Value = str.Value }))
    .GroupBy(item => item.Language)
    .ToDictionary(group => group.Key, group => group.ToDictionary(item => item.StrKey, item => item.Value));
var resultStr = JsonConvert.SerializeObject(result, Formatting.Indented);