JS: Двойные кавычки в JSON
Некий сайт при отправке XMLHttpRequest не возвращает responseJSON, а responseText такой вот:
Как видите, проблема в кавычках. Само собой JSON.parse не работает.
javascript меня удивил
var j = ''; var k = ''; console.log((j == k)); --> true
Нас невозможно сбить с пути, нам пофигу куда идти.
2 Ответ от teadrinker 2019-11-01 19:35:25
- teadrinker
- Администратор
- Неактивен










Re: JS: Двойные кавычки в JSON
Замените одинарный обратный слеш на двойной.
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder
3 Ответ от DnsIs 2019-11-01 19:47:46
Re: JS: Двойные кавычки в JSON
Совет отличный. НО! Я не знаю как.
[1] s = ''; [2] s = s.replace . [3] json = JSON.parse(s); [4] console.log(json.name)
Не могу справиться со второй строкой.
Нас невозможно сбить с пути, нам пофигу куда идти.
4 Ответ от teadrinker 2019-11-01 20:51:22 (изменено: teadrinker, 2019-11-01 20:53:24)
- teadrinker
- Администратор
- Неактивен










Re: JS: Двойные кавычки в JSON
Если текст буквально такой , проблем с JSON.parse быть не должно.
При записи в коде он должен выглядеть с двойным обратным слешем.
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder
Сообщения 4
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Как в json передать кавычки
Здесь могла бы быть ваша реклама
Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006
Откуда: Israel
Помог: 3 раз(а)
Секрет
Теперь, когда вы уже наверняка второпях отправили свой запрос,
я расскажу вам простой секрет, который сэкономит вам уйму ожиданий,
даже если первый ответ по теме последуем сразу же.
Само собой я знаю что ответят мне тут же, и если я посмотрю
на сообщения на форуме, то пойму что в общем то я и не ошибаюсь.
Но еще я точно замечу, что очень мало тем, в которых всего два ответа :
вопрос автора и еще два сообщение вида Ответ + Спасибо
После этого приходится начинать уточнять этим неграмотным что мне надо.
Они что, сами читать не умеют? А уточнять приходится.
И иногда пока они переварят то что я им скажу проходит и не одна ночь..
Уверен что если бы я им сказал что у меня есть
фиолетовый квадрат, и нужно превратить его в синий треугольник
и я пытался взять кисточку, макнуть в банку и поводить ей по квадрату
но почему то кисточка не принимала цвет краски в банке,
то на мой вопрос — где взять правильные банки мне бы ответили гораздо быстрее
предложив её открыть, а не тратить еще стольник на жестянку.
Поэтому с тех пор я строю свои вопросы по проверенной давным давно схеме:
Что есть
Что нужно получить
Как я пытался
Почему или что у меня не получилось.
На последок как оно происходит на форумах
Цитата:
Новичок: Подскажите пожалуста самый крепкий сорт дерева! Весь инет перерыл, поиском пользовался!
Старожил: Объясни, зачем тебе понадобилось дерево? Сейчас оно в строительстве практически не используется.
Новичок: Я небоскрёб собираюсь строить. Хочу узнать, из какого дерева делать перекрытия между этажами!
Старожил: Какое дерево? Ты вообще соображаешь, что говоришь?
Новичок: Чем мне нравиться этот форум — из двух ответов ниодного конкретного. Одни вопросы неподелу!
Старожил: Не нравится — тебя здесь никто не держит. Но если ты не соображаешь, что из дерева небоскрёбы не строят, то лучше бы тебе сначала школу закончить.
Новичок: Не знаите — лучше молчите! У меня дедушка в деревянном доме живёт! У НЕГО НИЧЕГО НЕ ЛОМАЕТСЯ.
Но у него дом из сосны, а я понимаю, что для небоскрёба нужно дерево прочнее! Поэтому и спрашиваю. А от вас нормального ответа недождёшся.
Прохожий: Самое крепкое дерево — дуб. Вот тебе технология вымачивания дуба в солёной воде, она придаёт дубу особую прочность:
Новичок: Спасибо, братан! То что нужно.
Отредактировано модератором: Uchkuma, 26 Апреля, 2011 — 10:21:12
Синтаксис JSON и примеры использования
JSON (JavaScript Object Notation) очень похож на буквенный синтаксис объекта JavaScript с тем лишь отличием, что имена свойств всегда заключены в двойные кавычки, и не используются другие виды кавычек (одинарные, обратные). Кроме того данные в формате JSON нельзя сразу использовать в JavaScript. Для работы с ними у глобального объекта JSON существует два метода: JSON.stringify() , который при базовом использовании принимает данные с типом Object, Array, Number, String, Boolean и Null, после чего преобразует их в JSON строку и JSON.parse() , который преобразует данные из JSON.
const myArr = [< first: 1 >, < second: 2 >]; const myObj = < myArr: myArr, myNum: 1, myStr: "Hello!", myBoolean: false, >; const myJSON = JSON.stringify(myObj); //<"myArr":[<"first":1>,],"myNum":1,"myStr":"Hello!","myBoolean":false> console.log(typeof myJSON); //string const parsedObj = JSON.parse(myJSON); //получаем исходный объект со всеми вложениями console.log(typeof parsedObj);//object

Перевод данных в формат JSON и обратно используется не только для передачи данных по сети, но и для клонирования ссылочных типов данных. В нашем примере свойство myArr объекта parsedObj не будет ссылаться на объявленный в первой строке массив, а создаст его независимую копию.
Ограничения формата JSON и как их обойти
При описании метода JSON.stringify() я не просто так перечислил поддерживаемые типы данных. Дело в том, что JSON не умеет работать с типами Date, BigInt, Map и остальными, не попавшими в описаный список. Что бы преобразовать такие данные в JSON строку необходимо привести их к поддерживаемому типу. Сделать это можно прямо внутри метода, передав в него необязательным параметром функцию, которая принимает все пары ключ-значение и преобразует их по ходу работы метода.
const myObj = < bigInt: 123n, date: new Date("2023-08-27"), >; console.log(JSON.stringify(myObj));//выдаст ошибку //TypeError: Do not know how to serialize a BigInt const replacer = (key, value) => < if (typeof value === "bigint") < return Number(value); >//проверяем тип значения if (key === "date") < return value.toString(); >//или ключ return value;//остальные значения просто возвращаем >; const replacedObj = JSON.stringify(myObj, replacer); //

Кроме того JSON.stringify() не может работать с циклическими зависимостями. Что бы исключить из сериализации значения с такими зависимостями или если вам нужно преобразовать в JSON формат только часть объекта, можно вместо функции передать вторым параметром массив ключей и в результате метод вернет строку, содержащую только пары ключ-значение с этими ключами.
const person = < name: "John", age: "22" >; const company = < name: "Company", employers: [person] >; //company ссылается на person person.company = company; //person ссылается на company console.log(JSON.stringify(person)); //TypeError: Converting circular structure to JSON const safetyProperties = Object.keys(person).filter( (elem) => elem !== "company" ); //создаем массив "безопасных" ключей console.log(JSON.stringify(person, safetyProperties)); //

Дополнительные возможности JSON.
Метод parse() глобального объекта JSON тоже принимает дополнительным параметром функцию, которая по аналогии с JSON.stringify() обработает каждую пару ключ-значение при парсинге строки.
const JSONdata = JSON.stringify(< name: "john", age: 22 >); const capitalizeName = (key, value) => < if (key === "name") < capitalizedName = value.replace(value[0], value[0].toUpperCase()); return capitalizedName; >//если ключ - name возвращаем имя с заглавной буквой в начале return value; //остальные значения просто возвращаем как есть >; console.log(JSON.parse(JSONdata, capitalizeName)); // < name: 'John', age: 22 >//заменить функцию на массив ключей, как в JSON.stringify не получится console.log(JSON.parse(JSONdata, ["name"])); //

Кроме функции обработки пар ключ-значение, метод JSON.stringify() может принимать еще одним параметром вид отступов для более удобного при чтении форматирования получаемой строки. Важно помнить, что это третий параметр метода и если функция или массив не переданы вторым параметром — нужно указать вместо них null .
const myObj = < name: "John", age: 22 >; console.log(JSON.stringify(myObj, null, 4)); // < // "name": "John", // "age": 22 // >console.log(JSON.stringify(myObj, null, 10)); // < // "name": "John", // "age": 22 // >//если не передавать null или второй параметр //форматирование останется стандартным console.log(JSON.stringify(myObj, 10)); //

Мы уже знаем что при вызове JSON.stringify() можно указать массив ключей или функцию, которая обработает все пары ключ-значение, но мы так же можем изменить поведение этого метода при описании объекта, который будет в него передаваться. Для этого нужно добавить такому объекту свойство toJSON и описать в нем функцию, возвращающую нужное нам значение. Таким образом можно “скрыть” для JSON.stringify() приватные данные или вовсе передавать значения полностью отличные от содержимого объекта.
const user = < name: "John", age: 22, password: "password", toJSON() < return < name: this.name, age: this.age >; >,//перечисляем свойства которые хотим передавать >; console.log(JSON.stringify(user, null, 2)); // < // "name": "John", // "age": 22 // >

Заключение
Работа с данными формата JSON и методами одноименного глобального объекта в JavaScript давно стала неотъемлемой частью разработки веб приложений поэтому навыки взаимодействия с ними необходимы каждому разработчику.
Как в json передать кавычки
При записи строки с кавычкой в JSON получаю лишний символ (обратный слеш).
ЗаписьJSON = Новый ЗаписьJSON();
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, «__»»__»);
СтрокаJSON = ЗаписьJSON.Закрыть();
возвращает «__\»__»
При обратном преобразовании символ сохраняется.
Что-то лыжи не едут. Гугл молчит. Баг?
ПараметрыЗаписиJSON (JSONWriterSettings)
ЭкранированиеСимволов (EscapeCharacters)
Использование:
Только чтение.
Описание:
Тип: ЭкранированиеСимволовJSON.
Определяет способ экранирования символов при записи документа JSON.
После создания объекта данное свойство имеет значение Нет.
Доступность:
Тонкий клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.
Использование в версии:
Доступен, начиная с версии 8.3.6.
Методическая информация
ЭкранированиеСимволов тут каким боком?
доступные значения: Нет, СимволыВнеASCII, СимволыВнеBMP. По умолчанию: Нет.
Перебрал все возможные значения — результат тот же.
Конструктор по умолчанию устанавливает:
ЗаписьJSON.Параметры.ИспользоватьДвойныеКавычки — истина
ЗаписьJSON.Параметры.ЭкранироватьОдинарныеКавычки — ложь