Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Сохранение объекта в строку (https://javascript.ru/forum/dom-window/79606-sokhranenie-obekta-v-stroku.html)

Янковиц 27.02.2020 18:17

Сохранение объекта в строку
 
Добрый день. Есть некий объект vals, который содержит ключи и значения.
Как преобразовать его в строку?
Если использую JSON.stringify(vals), объект получается с кавычками. Потом он используется в шорткоде:

[chart type="line" values="{"name":"День","stroke":"#bd0f0f","val ues":["100","200","400","350","620","50","50","400","800 ","700","650","500","123"]}"][/chart]

Соответственно, получается ошибка, из-за неправильного парсинга шорткода. Есть ещё какие-нибудь варианты?

Янковиц 27.02.2020 18:28

Так, чтобы потом было возможно снова распарсить строку в объект

laimas 27.02.2020 18:33

Цитата:

Сообщение от Янковиц
Так, чтобы потом было возможно снова распарсить строку в объект

JSON.stringify(vals)

Цитата:

Сообщение от Янковиц
получается ошибка, из-за неправильного парсинга шорткода

str.replace('"','')

Янковиц 27.02.2020 18:50

Не получается обратно спарсить

Вот строка: {name:День,stroke:#099e1b,values:{0:100,1:200, 2:400,3:350,4:620,5:50,6:50,7:400,8:800,9:700,10:6 50,11:500,12:123}}
Делаю через JSON.parse

laimas 27.02.2020 19:24

Цитата:

Сообщение от Янковиц
Не получается обратно спарсить

Вам для чего нужна строка без кавычек? Вот для того, чему нужна и удаляйте их, и если json нужен далее еще для чего-то, то его то зачем терзать?

voraa 27.02.2020 20:12

Ну если они однотипные, то можно свои преобразователи написать.

Nexus 28.02.2020 16:37

Цитата:

Сообщение от Янковиц
Не получается обратно спарсить

Вот строка: {name:День,stroke:#099e1b,values:{0:100,1:200, 2:400,3:350,4:620,5:50,6:50,7:400,8:800,9:700,10:6 50,11:500,12:123}}
Делаю через JSON.parse

Ваша строка - невалидный json.

Так не пробовали?
const serialize = obj => encodeURIComponent(JSON.stringify(obj));
const unserialize = serializedString => JSON.parse(decodeURIComponent(serializedString));

const object = {
    foo: 'bar'
};

const serializedObject = serialize(object);

console.log(`[chart values="${serializedObject}"][/chart]`);

console.log(unserialize(serializedObject));

Янковиц 28.02.2020 18:26

Сделал как сказал voraa, преобразовал кавычки в другие символы, а потом обратно конвертировал

voraa 28.02.2020 18:45

Цитата:

Сообщение от Янковиц (Сообщение 520741)
Сделал как сказал voraa, преобразовал кавычки в другие символы, а потом обратно конвертировал

Я этого не говорил.
Я не люблю str.replace('"','') вернее str.replace(/"/g,'')
Сам нарывался на ошибки в строках типа
" Это очень \"хитрая\" строка"

Aetae 28.02.2020 22:12

Если этот ваш шорткод понимает экранирование, то можно просто дважды экранировать:
JSON.stringify(JSON.stringify(vals))


Вообще если я правильно понимаю что такое шорткод, то каким образом вообще туда попадает что-то из javascript? Ручками?


Часовой пояс GMT +3, время: 17:34.