Преобразование строки в объект дает ошибку из-за двойных кавычек в начале и конце

у меня есть объект, который исходит от стороннего API. и это в таком виде:

"{ "type": "object", "properties": {   "hostUrl": {
    "type": "string",
    "description": "hostUrl",   }, }, }"

из-за двойной кавычки в начале и в конце я получаю сообщение об ошибке, и синтаксический анализ json также не удаляется, поэтому, пожалуйста, скажите мне, как удалить эту двойную кавычку, которая завернула в нее мой объект

В описании тега JSON: «Прежде чем задавать вопрос, подтвердите свой JSON с помощью валидатора JSON, такого как JSONLint (jsonlint.com)». Это недопустимый JSON. Попросите сопровождающего стороннего API исправить это.

jabaa 09.04.2022 21:59

@jabaa Поскольку это сторонний API, вместо того, чтобы просить их обновить свои базы данных, было бы лучше найти быстрое решение с нашей стороны.

Pavan Aditya M S 09.04.2022 22:28

@PavanAdityaMS Нет простого и быстрого решения. Вы должны разобрать строку. Вам нужен сложный синтаксический анализатор, учитывающий все крайние случаи.

jabaa 09.04.2022 22:31

@jabaa Это обычный объект json, ошибочно заключенный в двойные кавычки (вместо одинарных). Таким образом, преобразование его в строку и анализ с помощью JSON.parse() охватит все крайние случаи.

Pavan Aditya M S 09.04.2022 22:33

@PavanAdityaMS Запятые в конце не допускаются в JSON.

jabaa 09.04.2022 22:33

Можете ли вы показать код, который вы использовали для получения объекта?

Serge 09.04.2022 22:39

@Serge Строка исходит от стороннего API.

jabaa 09.04.2022 22:41

@jabaa Я понимаю это, но как ты это понимаешь? это недопустимая строка, и вы можете получить ее так, как вы ее опубликовали. Можете ли вы опубликовать настоящую строку, которая у вас есть?

Serge 09.04.2022 22:43

@Serge Как строка может быть недействительной? Вы можете предположить что-то вроде: const str = '"{ "type": "object", "properties": { "hostUrl": { "type": "string", "description": "hostUrl", }, }, }"';

jabaa 09.04.2022 22:44

@jabaa Извините, я не могу угадать, что у ОП. Мне нужна строка предварительно заданного размера, чтобы знать, как преобразовать ее в допустимый json.

Serge 09.04.2022 23:17

я исправил это спасибо всем за вклад

zai su 09.04.2022 23:39

Вы должны добавить свое решение.

jabaa 09.04.2022 23:47

@jabaa да, позвольте мне оптимизировать его, а затем я поделюсь чистым кодом здесь через несколько

zai su 10.04.2022 00:20
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Сравнение структур данных: Массивы и объекты в Javascript
Сравнение структур данных: Массивы и объекты в Javascript
Итак, вы изучили основы JavaScript и хотите перейти к изучению структур данных. Мотивация для изучения/понимания Структур данных может быть разной,...
Создание собственной системы электронной коммерции на базе Keystone.js - настройка среды и базовые модели
Создание собственной системы электронной коммерции на базе Keystone.js - настройка среды и базовые модели
Прошлая статья была первой из цикла статей о создании системы электронной коммерции с использованием Keystone.js, и она была посвящена главным образом...
Приложение для отслеживания бюджета на React js для начинающих
Приложение для отслеживания бюджета на React js для начинающих
Обучение на практике - это проверенная тема для достижения успеха в любой области. Если вы знаете контекст фразы "Практика делает человека...
Стоит ли использовать React в 2022 году?
Стоит ли использовать React в 2022 году?
В 2022 году мы все слышим о трендах фронтенда (React, Vue), но мы не знаем, почему мы должны использовать эти фреймворки, когда их использовать, а...
2
13
43
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Строковый объект JSON всегда должен содержать объект, заключенный в одинарные кавычки '. Ваш заключен в двойные кавычки ".

Поскольку вы получаете свой ответ JSON в неприемлемом формате, и вы не можете взять его и проанализировать напрямую, добавьте одну кавычку ' к первому и последнему ответу, чтобы сделать его действительным. То есть
если вы получаете ответ
"{ "type": "object", "properties": { "hostUrl": { "type": "string", "description": "hostUrl" } } }"
добавление одиночной кавычки делает это
'"{ "type": "object", "properties": { "hostUrl": { "type": "string", "description": "hostUrl" } } }"'

Поскольку теперь ваш объект является допустимой строкой, используйте метод подстроки и удалите неправильно размещенные двойные кавычки, чтобы получить допустимое строковое значение JSON.

Код, как показано ниже:

let obj = '"{ "type": "object", "properties": {"hostUrl": { "type": "string", "description": "hostUrl" } }}"';
obj = obj.substring(1, obj.length-1);
console.log(JSON.parse(obj));

Вы забыли запятые в конце. Фактическая строка в вопросе — "{ "type": "object", "properties": { "hostUrl": { "type": "string", "description": "hostUrl", }, }, }".

jabaa 09.04.2022 22:32

@jabaa Я дал это решение, предполагая, что конечные запятые были просто добавлены в качестве наполнителя. Я имею в виду указание на продолжение свойств объекта. Г-н Зай Су. Если вышеперечисленное не является вариантом использования этих завершающих запятых, то, как сказал г-н jabaa, даже я согласен с тем, что ваш JSON имеет неправильный формат и требует обновления в конце API.

Pavan Aditya M S 09.04.2022 22:39

Не делайте предположений. Ответьте на фактический вопрос с фактической строкой.

jabaa 09.04.2022 22:40

json был в неправильном формате. мне пришлось преобразовать его в строку, а затем применить тяжелое регулярное выражение к методам замены, чтобы получить его прямо сейчас, он отлично работает

zai su 09.04.2022 23:41
Ответ принят как подходящий

попробуй это

const jsonStr =
  '"{ "type": "object", "properties": {  "hostUrl": { "type": "string", "description": "hostUrl",   }, }, }"';

var json = jsonStr
  .substring(1, jsonStr.length - 1)
  .replaceAll("},", "}")
  .replaceAll(" ", "")
  .replaceAll(",}", "}");

json

{
  "type": "object",
  "properties": {
    "hostUrl": {
      "type": "string",
      "description": "hostUrl"
    }
  }
}

Вы должны хотя бы упомянуть, что ваш код изменит все строки, содержащие },, и будет работать только для этого примера. Ваш код очень легко сломать. Это не будет работать с массивами. Возможно, ваш ответ является правильным решением для этого вопроса, но я ожидаю ответа, который может обрабатывать "{ "type": "some\"},\"type", "properties": ["a", "b",], }" без изменения some"},"type.

jabaa 09.04.2022 23:06

Другие вопросы по теме