Что не так с этой строкой JSON?Также это работает с JSONLint - PullRequest
2 голосов
/ 21 марта 2019

Эта строка JSON кажется недействительной, но когда я проверяю ее с помощью JSONLint, она говорит, что она действительна, так в чем проблема. Ошибка появляется в позиции 252.

let test = JSON.parse('[{"id":6,"item_type":"cybro_unit","unitId":6,"pos_id":9,"name":"CyBro-2","image":"images/cybro/defaultBro.png","layer":"10","positionX":111.0,"positionY":249.0,"layerName":"10","sizeX":201.0,"sizeY":168.0,"z_index":9999,"showLabel":true,"hint":"CyBro-2\nPovezan: true\nVelikost X: 201.523163\nVelikost Y: 168.675491","enabled":true,"connected":false}]');

[{
    "id": 6,
    "item_type": "cybro_unit",
    "unitId": 6,
    "pos_id": 9,
    "name": "CyBro-2",
    "image": "images/cybro/defaultBro.png",
    "layer": "10",
    "positionX": 111.0,
    "positionY": 249.0,
    "layerName": "10",
    "sizeX": 201.0,
    "sizeY": 168.0,
    "z_index": 9999,
    "showLabel": true,
    "hint": "CyBro-2\nPovezan: true\nVelikost X: 201.523163\nVelikost Y: 168.675491", // here at CyBro-2
    "enabled": true,
    "connected": false
}]

Ответы [ 3 ]

5 голосов
/ 21 марта 2019

Скорее всего, это спасатель, человек, вы пытались убежать от \, поэтому все, что вы делаете, не обнаруживает его как разрыв строки?

EDIT:

Я имею в виду, я просто сделал это, и это сработало, попробуйте это:

JSON.parse('[{"id":6,"item_type":"cybro_unit","unitId":6,"pos_id":9,"name":"CyBro-2","image":"images/cybro/defaultBro.png","layer":"10","positionX":111.0,"positionY":249.0,"layerName":"10","sizeX":201.0,"sizeY":168.0,"z_index":9999,"showLabel":true,"hint":"CyBro-2\\nPovezan: true\\nVelikost X: 201.523163\\nVelikost Y: 168.675491","enabled":true,"connected":false}]');
2 голосов
/ 21 марта 2019

В строке, которую вы передаете JSON.parse, есть несколько букв , символ новой строки символов:

"hint":"CyBro-2\nPovezan: true\nVelikost X: 201.523163\nVelikost Y: 168.675491"
               ^^             ^^                      ^^

const str = '[{"id":6,"item_type":"cybro_unit","unitId":6,"pos_id":9,"name":"CyBro-2","image":"images/cybro/defaultBro.png","layer":"10","positionX":111.0,"positionY":249.0,"layerName":"10","sizeX":201.0,"sizeY":168.0,"z_index":9999,"showLabel":true,"hint":"CyBro-2\nPovezan: true\nVelikost X: 201.523163\nVelikost Y: 168.675491","enabled":true,"connected":false}]';
console.log(str);

Символы новой строки недопустимы в JSON - вместо этого у вас должен быть литерал \, за которым следует литерал n, чтобы указать, что проанализированная строка в объекте должнасодержит буквальный перевод строки.Вы можете сделать это двойным экранированием \ s, чтобы указать один литерал \, например:

"hint":"CyBro-2\\nPovezan: true\\nVelikost X: 201.523163\\nVelikost Y: 168.675491"

let test = JSON.parse(
'[{"id":6,"item_type":"cybro_unit","unitId":6,"pos_id":9,"name":"CyBro-2","image":"images/cybro/defaultBro.png","layer":"10","positionX":111.0,"positionY":249.0,"layerName":"10","sizeX":201.0,"sizeY":168.0,"z_index":9999,"showLabel":true,"hint":"CyBro-2\\nPovezan: true\\nVelikost X: 201.523163\\nVelikost Y: 168.675491","enabled":true,"connected":false}]'
);

console.log(test);
1 голос
/ 21 марта 2019

Вы не избежали своего символа новой строки \n:

let test = JSON.parse('[{"id":6,"item_type":"cybro_unit","unitId":6,"pos_id":9,"name":"CyBro-2","image":"images/cybro/defaultBro.png","layer":"10","positionX":111.0,"positionY":249.0,"layerName":"10","sizeX":201.0,"sizeY":168.0,"z_index":9999,"showLabel":true,"hint":"CyBro-2\\nPovezan: true\\nVelikost X: 201.523163\\nVelikost Y: 168.675491","enabled":true,"connected":false}]');
console.log(test);
.as-console-wrapper { max-height: 100% !important; top: 0; }

Вы также можете сделать это, заменив все \n на \\n:

let test = '[{"id":6,"item_type":"cybro_unit","unitId":6,"pos_id":9,"name":"CyBro-2","image":"images/cybro/defaultBro.png","layer":"10","positionX":111.0,"positionY":249.0,"layerName":"10","sizeX":201.0,"sizeY":168.0,"z_index":9999,"showLabel":true,"hint":"CyBro-2\\nPovezan: true\\nVelikost X: 201.523163\\nVelikost Y: 168.675491","enabled":true,"connected":false}]';
test = test.replace(/\n/g, "\\n");
console.log(JSON.parse(test));
.as-console-wrapper { max-height: 100% !important; top: 0; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...