powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Как преобразовать такую строку в массив ?
25 сообщений из 27, страница 1 из 2
Как преобразовать такую строку в массив ?
    #39336237
ProBiotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет.
В сторонний компонент нужно передать массив объектов такого вида:

[{ Topic: 'Topic1', Title: '1/59'},{ Topic: 'Topic2', title: '2/59'}]

Я формирую эту строку на серверной стороне и запрашиваю через Ajax.

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
var files;
$.ajax({
...
async: false,
success: function (data) {
                if (data.length > 0) {
                    files = data;
                }
                else { alert("Документы не найдены"); }
            },



я кстати не уверен как проверить, что в data есть результаты. Наверное использовать length не верно.
далее мне нужно строку, полученную с сервиса распарсить в массив и передать в компонент.
пробую так

Код: javascript
1.
2.
3.
4.
5.
6.
            if (!(files == undefined))
            {
                //var myArray = JSON.parse(files);
                var myArray = eval(files);
                $.MyPluginDoWork(myArray);
            }



после обработки Ajax в files хранится такая строка
"[{ Topic: 'hello', Title: '1/world'}]"

после выполнения eval в myArray получается такая строка
"[{ Topic: 'hello', Title: 'world'}]"

но мне нужно, чтобы на выходе был массив объектов. подскажите как получить массив ?
...
Рейтинг: 0 / 0
Как преобразовать такую строку в массив ?
    #39336302
ProBiotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eval заработал. видимо была ошибка где-то.
...
Рейтинг: 0 / 0
Как преобразовать такую строку в массив ?
    #39336662
code19
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ProBiotek,

А не проще с сервера слать JSON вместо строки?
...
Рейтинг: 0 / 0
Как преобразовать такую строку в массив ?
    #39336675
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ProBiotek[{ Topic: 'Topic1', Title: '1/59'},{ Topic: 'Topic2', title: '2/59'}]
JSON должен выглядеть так:
Код: javascript
1.
[{ "Topic": "Topic1", "Title": "1/59"},{ "Topic": "Topic2", "title": "2/59"}]



и никакой eval не нужен (он вообще-то даже вреден)
...
Рейтинг: 0 / 0
Как преобразовать такую строку в массив ?
    #39337750
ProBiotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
т.е. вот сюда:
Код: javascript
1.
success: function (data)


в data будет уже хранится JSON ? Или там будет хранится уже распарсенный массив объектов ?

Т.е. я смогу просто вот так сразу написать ?
Код: javascript
1.
2.
3.
success: function (data) {files = data}   // у нас тут синхронный ajax и нужно через глобальную переменную перекинуть полученное значение дальше в код
...
$.MyPluginDoWork(data); // завершился ajax дальше идет обычный синхронный код



И сразу вопрос. Как проверить корректность пришедшего JSON ? Проверить, что там массив объектов с нужными мне свойствами (Topic, Title), и что массив имеет хотя бы одну запись ?
...
Рейтинг: 0 / 0
Как преобразовать такую строку в массив ?
    #39337923
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ProBiotekт.е. вот сюда:
Код: javascript
1.
success: function (data)


в data будет уже хранится JSON ? Или там будет хранится уже распарсенный массив объектов ?
Это зависит от настроек твоего запроса...
ProBiotekКак проверить корректность пришедшего JSON ? Проверить, что там массив объектов с нужными мне свойствами (Topic, Title), и что массив имеет хотя бы одну запись ?
Если все настроишь как нужно - работай как с "обычными" объектами и массивами...
...
Рейтинг: 0 / 0
Как преобразовать такую строку в массив ?
    #39337942
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ProBiotekв data будет уже хранится JSON ? Или там будет хранится уже распарсенный массив объектов ?
я так понимаю, там будет строка символов по формату отданым сервером.
...
Рейтинг: 0 / 0
Как преобразовать такую строку в массив ?
    #39337966
ProBiotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsa,

Я на сервере генерирую это в виде строки. отдаю из asp net mvc как jsonresult.
Соответственно мне хотелось бы понять что мне нужно сделать, настроить - чтобы не приходилось через eval парсить.
...
Рейтинг: 0 / 0
Как преобразовать такую строку в массив ?
    #39337993
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ProBiotekотдаю из asp net mvc как jsonresult.
посмотри в момент отдачи - что отдаёшь.
Объекты по сети не лазят. Только строки.
Значит ты по AJAX получил строку с определённым форматом.
- при приходе в JS валидируешь и парсишь в объекты.
Как это в коде никто конкретно не говорит).
Мож через try?
Я только терминологию уточнил.
...
Рейтинг: 0 / 0
Как преобразовать такую строку в массив ?
    #39338064
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ProBiotekчтобы не приходилось через eval парсить.
Так есть метод специальный для работы со json-строкой
https://learn.javascript.ru/json#метод-json-parse
...
Рейтинг: 0 / 0
Как преобразовать такую строку в массив ?
    #39338154
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsaТак есть метод специальный для работы со json-строкой
так для этого json нужно получить от сервера, а не его подобие
...
Рейтинг: 0 / 0
Как преобразовать такую строку в массив ?
    #39338470
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилтак для этого json нужно получить от сервера, а не его подобие
А у автора что есть?
ProBiotekВ сторонний компонент нужно передать массив объектов такого вида:
Код: javascript
1.
[{ Topic: 'Topic1', Title: '1/59'},{ Topic: 'Topic2', title: '2/59'}]


Я формирую эту строку на серверной стороне и запрашиваю через Ajax.
Не json разве?
...
Рейтинг: 0 / 0
Как преобразовать такую строку в массив ?
    #39338500
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsaНе json разве?
не json согласно RFC7159

json -
Код: javascript
1.
[{ "Topic": "Topic1", "Title": "1/59"},{ "Topic": "Topic2", "title": "2/59"}]
...
Рейтинг: 0 / 0
Как преобразовать такую строку в массив ?
    #39338507
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ProBiotek,
Я бы разделил валидацию общую на валидацию формата json и валидацию по передаваемым данным.
Вторую за счет добавки обязательного поля Версия в каждый json.
Imho
...
Рейтинг: 0 / 0
Как преобразовать такую строку в массив ?
    #39338821
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилне json согласно RFC7159
Так пусть сделает json... Ему какая разница чего на сервере формировать.
...
Рейтинг: 0 / 0
Как преобразовать такую строку в массив ?
    #39339294
ProBiotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вообще я уже сделал через eval. Но нужно будет переделать по уму, как минимум сделать JSon как Изопропил предлагает. Попробую позже, сейчас другие задачи - а та хоть как-то, но работает :) Спасибо за идеи, буду знать теперь.
...
Рейтинг: 0 / 0
Как преобразовать такую строку в массив ?
    #39339347
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ProBiotekхоть как-то, но работает
хуяк - и в продакшн
...
Рейтинг: 0 / 0
Как преобразовать такую строку в массив ?
    #39344795
ProBiotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Переделал. Конструируется такая строка
Код: javascript
1.
2.
"[{ "Topic": "Topic1", "Title": "1/23"}, 
  { "Topic": "Topic2", "Title": "2/23"},....]"



Скрипт обрабатывает это так
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
var files;
$.ajax({
...
async: false,
success: function (data) {
                if (data.length > 0) {
                    files = data;
                }
                else { alert("Документы не найдены"); }
            },

if (!(files == undefined))
            {
                //var myArray = eval(files);
                var myArray = JSON.parse(files);
                $.MyPluginDoWork(myArray);
            }



Это работает. Как работал и вариант с eval. Соответственно вопросы.
1. В чем разница? parse или eval, если нет разницы, то... в чем смысл ?
2. Насколько данный код if-ов корректен, и как его улучшить:
Код: javascript
1.
2.
3.
4.
5.
if (data.length > 0) {
                    files = data;
}
...
if (!(files == undefined))



Сначала я проверяю длину пришедшей строки, и если есть хоть 1 символ считаю, что она более-менее нормальная. А вот во второй проверке совсем не уверен. Полагаю,что правильней проверить, что files это массив объектов вида { "Topic": "Topic1", "Title": "1/23"}.
...
Рейтинг: 0 / 0
Как преобразовать такую строку в массив ?
    #39344807
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ProBiotek,
1. Поставить try
2.
19844570
Больше ничего не надо.
...
Рейтинг: 0 / 0
Как преобразовать такую строку в массив ?
    #39344823
ProBiotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

Можно примеры кода ? Я не настолько опытен в JS, чтобы самостоятельно облечь словесное описание в код.
Собственно в этом мой вопрос был. Как правильно нужно было написать этот код.
...
Рейтинг: 0 / 0
Как преобразовать такую строку в массив ?
    #39344829
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ProBiotek,
1/
Код: sql
1.
2.
3.
4.
5.
6.
7.
if (response){
    try{
        a=JSON.parse(response);
    }catch(e){
        alert(e); //error in the above string(in this case,yes)!
    }
}


https://www.google.ru/search?q=JSON.parse&ie=utf-8&oe=utf-8&gws_rd=cr&ei=IVEkWL_VIcS2swGhzrSADQ#newwindow=1&q=js json.parse exception
2.
Типа так как вариант:
"[{ "Version": "12345"},{ "Topic": "Topic1", "Title": "1/23"},
{ "Topic": "Topic2", "Title": "2/23"},....]"
...
Рейтинг: 0 / 0
Как преобразовать такую строку в массив ?
    #39344837
ProBiotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

По второму пункту вооообще ничего не понял :) Что с этим делать не знаю даже.
...
Рейтинг: 0 / 0
Как преобразовать такую строку в массив ?
    #39344848
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ProBiotekPetro123,
По второму пункту вооообще ничего не понял :) Что с этим делать не знаю даже.
если валидацию по формату прошёл без райзе, значит там JSON.
Что там именно в элементах массиве можно не проверять.
Либо проверить только один элемент - номер версии.
Так понятно?
...
Рейтинг: 0 / 0
Как преобразовать такую строку в массив ?
    #39344864
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ProBiotek 1. В чем разница? parse или eval, если нет разницы, то... в чем смысл ?eval исполняет текст как скрипт, ему можно любой js-код подсунуть.
JSON понимает только, соответственно, формат json и преобразовывает текст в объект, не исполняя ничего лишнего.
JSON.parse по идее быстрее eval.
...
Рейтинг: 0 / 0
Как преобразовать такую строку в массив ?
    #39344866
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
if (!(files == undefined)) -> if (files != undefined)
...
Рейтинг: 0 / 0
25 сообщений из 27, страница 1 из 2
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Как преобразовать такую строку в массив ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]