.dat (неизвестная запись) в формате json - PullRequest
0 голосов
/ 06 ноября 2018

Я работаю в игре с открытым исходным кодом Argentum Online, вы можете проверить наш код здесь https://github.com/ao-libre

Проблема, с которой я сталкиваюсь, состоит в том, что в ней много файлов с расширением .dat в следующем формате:

[NPC12] 
Name=Sastre
Desc=¡Hola forastero! Soy el Sastre de Ullathorpe, Bienvenido!
Head=9
Body=50
Heading=3
Movement=1
Attackable=0
Comercia=1
TipoItems=3
Hostil=0
GiveEXP=0
GiveGLD=0
InvReSpawn=0
NpcType=0
Alineacion=0
DEF=0
MaxHit=0
MaxHp=0

[NPC19]
Name=Sastre
Desc=¡Bienvenida Viajera! Tengo hermosas vestimentas para ofrecerte...
Head=70
Body=80
Heading=3
Movement=1
Attackable=0
Comercia=1
TipoItems=3
Hostil=0
GiveEXP=0
GiveGLD=0

Я хотел бы знать, имеет ли этот вид синтаксического анализа правильное имя и как его можно преобразовать в json?

1 Ответ

0 голосов
/ 06 ноября 2018

После прочтения комментария выше от @ mx0. Формат называется INI Format https://en.wikipedia.org/wiki/INI_file

Здесь ответ для преобразования между INI в JSON

Модуль Npm: https://github.com/npm/ini

Или ES6 Snippet

let ini2Obj = {};
const keyValuePair = kvStr => {
    const kvPair = kvStr.split('=').map( val => val.trim() );
    return { key: kvPair[0], value: kvPair[1] };
};
const result = document.querySelector("#results");
document.querySelector( '#inifile' ).textContent
    .split( /\n/ )                                       // split lines
    .map( line => line.replace( /^\s+|\r/g, "" ) )     // cleanup whitespace
    .forEach( line =>  {                               // convert to object
        line = line.trim();
        if ( line.startsWith('#') || line.startsWith(';') ) { return false; }
        if ( line.length ) {
          if ( /^\[/.test(line) ) {
            this.currentKey = line.replace(/\[|\]/g,'');
            ini2Obj[this.currentKey] = {};
          } else if ( this.currentKey.length ) {
            const kvPair = keyValuePair(line);
            ini2Obj[this.currentKey][kvPair.key] = kvPair.value;
          }
        } 
      }, {currentKey: ''} );

result.textContent += 
    `**Check: ini2Obj['Slave_Settings:11'].ConfigurationfilePath = ${
      ini2Obj['Slave_Settings:11'].ConfigurationfilePath}`;

result.textContent += 
  `\n\n**The converted object (JSON-stringified)\n${
  JSON.stringify(ini2Obj, null, ' ')}`;

Оригинальный ответ: Библиотека Javascript для преобразования файла .ini в файл .json (на стороне клиента)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...