JSON парсер добавляет двойные кавычки к ключу объекта в javascript - PullRequest
0 голосов
/ 27 апреля 2020

Я столкнулся со странной проблемой. Я использую RESTful API, который возвращает следующее тело ответа:

{
"bourseMarket":[2.9966187229626504E16,2.8923052836886444E16],
"bourseTrade":[1.13589172355139E14,4.903299930043E13],
"‌bourseMarketf":[6.037694517655877E15,5.876172638826381E15],
"‌bourseTradef":[4.3646660180697E13,2.2708648590401E13]
}

Когда я анализирую это, JS возвращает следующий объект:

bourseMarket: Array [ 29966187229626504, 28923052836886444 ]
​bourseTrade: Array [ 113589172355139, 49032999300430 ]
​"‌bourseMarketf": Array [ 6037694517655877, 5876172638826381 ]
​"‌bourseTradef": Array [ 43646660180697, 22708648590401 ]

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

TypeError: obj.bourseTradef is undefined

Я даже пытался obj["bourseTradef"], но тоже не удалось.

Я использую стандартные методы для извлечения данных:

const getData = async (url) => {

    return await fetch(url).then(resp => {
        if (resp.status === 200) {

            return resp.json();
        }
        else
            throw new Error("HTTP ERROR");
    }
    ).catch(e => { showAlert("مشکل در شبکه") });
}

getData(tradeBaseUrl).then((obj) => {
        console.log(obj);
....

ОБНОВЛЕНИЕ

Я допустил глупую ошибку. Я добавил невидимый символ в начале этих двух ключей по ошибке. Я выяснил проблему, проверив раздел «Сеть» тела запроса, как предложил Фил. Два небольших розовых кружочка были добавлены в начале строки ключей.

Ответы [ 2 ]

3 голосов
/ 27 апреля 2020

Оба ключа содержат скрытый символ. Если вы откроете (отредактируете) фрагмент, который он показывает, но вы также можете использовать charCodeAt, чтобы открыть его:

const x = JSON.parse(`{
  "bourseMarket":[2.9966187229626504E16,2.8923052836886444E16],
  "bourseTrade":[1.13589172355139E14,4.903299930043E13],
  "‌bourseMarketf":[6.037694517655877E15,5.876172638826381E15],
  "‌bourseTradef":[4.3646660180697E13,2.2708648590401E13]
}`);

console.log(`you would expect "bourseTradef".charCodeAt(0) to be  be ${"bourseTradef".charCodeAt(0)}`);
console.log(`but here it is ${"‌bourseTradef".charCodeAt(0)}`);

console.log(`So x["‌bourseTradef"] is possible: ${x["‌bourseTradef"]}`);
console.log(`But not x["bourseTradef"]: ${x["bourseTradef"]}`);
.as-console-wrapper { top: 0; max-height: 100% !important; }
1 голос
/ 27 апреля 2020

В начале примера "ourbourseMarketf" и "‌bourseTradef" в образце есть символ не присоединяемого (\ u200 c) нулевой ширины. Javascript добавляет кавычки для обозначения его присутствия.

...