Как преобразовать различные способы хранения текстовых строк JSON - PullRequest
0 голосов
/ 20 мая 2019

Я делаю игру Unity для использования в WebGL, и мне нужно хранить все диалоги / текст игры в файле JSON для целей локализации. Я также использую инфраструктуру Fungus внутри Unity, чтобы помочь мне построить повествовательную структуру диалогов.

Игра будет подключена к платформе с использованием API, который работает для чтения языкового файла JSON следующим образом: Language> Key Name.

Каркас гриба считывает диалоги, используя файл JSON, следующим образом: Key Name> Language.

Это формат, используемый фреймворком грибка для чтения файлов 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 Ответ

1 голос
/ 21 мая 2019

Предположим, у вас есть строка в качестве входных данных, и вы хотите преобразовать ее в другую строку.
Вот способ:

  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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...