Апостроф экранируется в массиве строк JSON

#javascript #node.js #json

#javascript #node.js #json

Вопрос:

В файле .json у меня есть следующее:

 {
    "WRATH OF THE C’TAN": {
        "description": "The C’tan’s ever-burning rage at their enslavement is turned upon the enemy with cataclysmic results.",
        "stratagem": "Use this Stratagem after a C’TAN SHARD from your army has resolved a Power of the C’tan. Roll a D6 to randomly select a Power of the C’tan from page 113. The C’tan Shard immediately uses the power rolled, even if it has already used that power this phase.",
        "cost": 2,
        "conditions": [
            "factionkeywords"
        ],
        "factionkeywords": [
            "C'tan Shards"
        ]
    }
}
  

Я читаю в файле JSON следующий код и запускаю его с помощью Node:

 var fileContents = fs.readFileSync(path, "utf8").toString();
library = JSON.parse(fileContents);
  

Я повторяю массив factionkeywords, считанный из файла JSON, и сравниваю каждую строку (в данном случае одну, у некоторых других больше) с единицей, чтобы увидеть, содержит ли ее factionkeywords эту строку.

Проблема, с которой я сталкиваюсь, заключается в том, что строка в массиве factionkeywords экранирует апостроф. Когда я утешаю.регистрируйте объект, я получаю это:

 {
    description: 'The powers of the C’tan are myriad and terrifying. To battle a fragment of these shackled star gods is to find reality unbound.',
    stratagem: 'Use this Stratagem at the start of your Movement phase. Select a C’TAN SHARD from your army. That model can replace one of its Powers of the C’tan with a different Power of the C’tan of your choice.',
    cost: 1,
    conditions: [ 'factionkeywords' ],
    factionkeywords: [ 'C'tan Shards' ]
}
  

Я не понимаю, почему апостроф экранируется в строке массива, но не в строках описания или стратегии. В результате я не могу проверить, содержит ли блок эту строку, поскольку она не будет совпадать.

Я провел довольно много поисковых запросов в Google, но ничего не смог найти. Все, что приходит в голову, — это как добавить экранирование. Я хочу знать, почему он автоматически экранирует апострофы при импорте, но только в массиве, а не в других строках.

Заранее благодарю вас!

Комментарии:

1. сосредоточьтесь на одинарных кавычках. Они оба разные. Во factionkeywords это не апостроф, а одинарная кавычка, используемая как апостроф.

Ответ №1:

Escape добавлен, console.log чтобы не путать апостроф с начальными и конечными одинарными кавычками, для которых он использует один и тот же символ. Он не существует в вашей строке. Попробуйте console.log(myobject.factionkeywords[0]) увидеть вашу строку такой, какая она есть на самом деле.

Причина, по которой экранирование не было выполнено description , заключается в том, что у вас там нет того же символа. factionkeywords содержит ‘АПОСТРОФ’ (U 0027), в то время description как содержит ‘ПРАВУЮ ОДИНАРНУЮ КАВЫЧКУ’ (U 2019).

Комментарии:

1. Спасибо! Это решило мою проблему. Я не забуду следить за разными типами символов. Часть информации я скопировал / вставил, часть я ввел сам. Надеюсь, это поможет какой-нибудь другой бедной душе, такой как я.