Как я могу разобрать ввод json внутри этого файла, особенно для свойств secondary
?
https://github.com/smogon/pokemon-showdown/blob/master/data/moves.js
Они составлены типами optional
и variant
.
Хотя только полный пример может выявить проблему в более ясный способ, минимальным примером для начала будет следующий:
[
{},
{
"secondary": false
},
{
"secondary": {
"chance": 10,
"boosts": {
"spd": -1
}
}
},
{
"secondary": {
"chance": 30,
"volatileStatus": "flinch"
}
},
{
"secondary": {
"chance": 30
}
},
{
"secondary": {
"chance": 10,
"self": {
"boosts": {
"atk": 1,
"def": 1,
"spa": 1,
"spd": 1,
"spe": 1
}
}
}
},
{
"secondary": {
"chance": 10,
"status": "brn"
}
},
{
"secondary": {
"chance": 50,
"self": {
"boosts": {
"def": 2
}
}
}
},
{
"secondary": {
"chance": 100,
"self": {}
}
},
{
"secondary": {
"chance": 50,
"boosts": {
"accuracy": -1
}
}
}
]
Для вашего удобства , вы можете прикрепить этот фрагмент к концу файла js и запустить его используя node move.js
. Два действительных json файла будут сохранены на вашем диске. Один из них представляет собой список json объектов, в то время как другой является объектом со строкой в качестве ключа.
var fs = require('fs');
fs.writeFile("moves_object.json", JSON.stringify(BattleMovedex), function(err) {}); // 1. save a json object with string key
var jsonList = []
for (var key of Object.keys(BattleMovedex)) {
jsonList.push(BattleMovedex[key]);
}
fs.writeFile("moves.json", JSON.stringify(jsonList), function(err) { // 2. save as a list of json object
if (err) {
console.log(err);
}
});
В c ++ (17/20) здесь есть предыдущие попытки:
https://github.com/nlohmann/json/issues/1281
https://github.com/nlohmann/json/issues/1910
https://github.com/nlohmann/json/issues/1261
Вот котельная плита Заботясь о простых необязательных полях, вы можете начать с:
struct Boosts {
optional<int> atk;
optional<int> def;
};
struct Self {
optional<Boosts> boosts;
};
struct Secondary {
optional<int> chance;
optional<string> volatileStatus;
optional<Boosts> boosts;
optional<Self> self;
optional<string> status;
};
struct move_t {
int num;
variant<bool, int> accuracy;
int basePower;
string category;
optional<string> desc = std::nullopt;
string shortDesc;
string id;
string name;
optional<variant<bool, Secondary>> secondary;
};