у меня есть объект, который исходит от стороннего API. и это в таком виде:
"{ "type": "object", "properties": { "hostUrl": {
"type": "string",
"description": "hostUrl", }, }, }"
из-за двойной кавычки в начале и в конце я получаю сообщение об ошибке, и синтаксический анализ json также не удаляется, поэтому, пожалуйста, скажите мне, как удалить эту двойную кавычку, которая завернула в нее мой объект
@jabaa Поскольку это сторонний API, вместо того, чтобы просить их обновить свои базы данных, было бы лучше найти быстрое решение с нашей стороны.
@PavanAdityaMS Нет простого и быстрого решения. Вы должны разобрать строку. Вам нужен сложный синтаксический анализатор, учитывающий все крайние случаи.
@jabaa Это обычный объект json, ошибочно заключенный в двойные кавычки (вместо одинарных). Таким образом, преобразование его в строку и анализ с помощью JSON.parse() охватит все крайние случаи.
@PavanAdityaMS Запятые в конце не допускаются в JSON.
Можете ли вы показать код, который вы использовали для получения объекта?
@Serge Строка исходит от стороннего API.
@jabaa Я понимаю это, но как ты это понимаешь? это недопустимая строка, и вы можете получить ее так, как вы ее опубликовали. Можете ли вы опубликовать настоящую строку, которая у вас есть?
@Serge Как строка может быть недействительной? Вы можете предположить что-то вроде: const str = '"{ "type": "object", "properties": { "hostUrl": { "type": "string", "description": "hostUrl", }, }, }"';
@jabaa Извините, я не могу угадать, что у ОП. Мне нужна строка предварительно заданного размера, чтобы знать, как преобразовать ее в допустимый json.
я исправил это спасибо всем за вклад
Вы должны добавить свое решение.
@jabaa да, позвольте мне оптимизировать его, а затем я поделюсь чистым кодом здесь через несколько
Строковый объект 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 Я дал это решение, предполагая, что конечные запятые были просто добавлены в качестве наполнителя. Я имею в виду указание на продолжение свойств объекта. Г-н Зай Су. Если вышеперечисленное не является вариантом использования этих завершающих запятых, то, как сказал г-н jabaa, даже я согласен с тем, что ваш JSON имеет неправильный формат и требует обновления в конце API.
Не делайте предположений. Ответьте на фактический вопрос с фактической строкой.
json был в неправильном формате. мне пришлось преобразовать его в строку, а затем применить тяжелое регулярное выражение к методам замены, чтобы получить его прямо сейчас, он отлично работает
попробуй это
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
.
В описании тега JSON: «Прежде чем задавать вопрос, подтвердите свой JSON с помощью валидатора JSON, такого как JSONLint (jsonlint.com)». Это недопустимый JSON. Попросите сопровождающего стороннего API исправить это.