Ответы пользователя по тегу JSON
  • Как корректно записать данные?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Как бы костыль, но в большинстве случаев будет работать:
    data = JSON.parse(result.replace(/\]\[/g,'],['));

    Ещё можно так:
    data = JSON.parse(result.split('][').join('],['));
    Ответ написан
    4 комментария
  • Как избежать ошибки при парсинге Json файла?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Видно же, что response['weather'] - это массив, поэтому:
    weather = response['weather'][0]['main']

    TypeError: list indices must be integers

    Логично, речь про индексы массива, они могут быть только числовые.
    Ответ написан
    4 комментария
  • Как записать данные в ini файл в таком формате?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    [dropChance]
    1 = 0.7
    2 = 0.25
    3 = 0.25
    4 = 0.1
    Ответ написан
    Комментировать
  • Как оптимальнее реализовать поиск значений в json?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Через indexOf можно. Это самое оптимальное, что приходит в голову, т.е. самый прямой поиск "в лоб" без лишних вычислений. Оптимальнее только поиск без поиска, когда заранее известны индексы, откуда нужно брать значения.

    var json_str = `,{"name":"Adhi Kot","id":"379","nametype":"Valid","recclass":"EH4","mass":"4239","fall":"Fell","year":"1919-01-01T00:00:00.000","reclat":"32.100000","reclong":"71.800000","geolocation":{"type":"Point","coordinates":[71.8,32.1]}},{"name":"Adzhi-Bogdo (stone)","id":"390","nametype":"Valid","recclass":"LL3-6","mass":"910","fall":"Fell","year":"1949-01-01T00:00:00.000","reclat":"44.833330","reclong":"95.166670","geolocation":{"type":"Point","coordinates":[95.16667,44.83333]}}`;
    var i = 0;
    while((i=json_str.indexOf('"recclass":"',i))!==-1) {
    	i+=12;
    	let j = json_str.indexOf('"',i);
    	let val = json_str.substring(i,j);
    	console.log(val); //выводим очередное значение
    }
    Ответ написан
  • Как записать массив в JSON?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    JSON.stringify(spisok)
    Ответ написан
    4 комментария
  • При обработки ответа в формате JSON происходит ошибка SyntaxError, как исправить?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Можно обойтись своими силами. Однажды я уже отвечал на подобный вопрос.
    Надеюсь, сможете сами переписать на JavaScript, ну или хотя бы ухватить идею и сделать что-то похожее. Но вообще, конечно, надо продолжать давить на бекендеров.
    Ответ написан
    6 комментариев
  • Как научиться правильно строить архитектуру JSON?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Правильно так, как удобно.
    То есть удобство - и есть основной критерий правильности.

    Например, если у объекта сотни свойств, было бы удобно разбить их на категории. Если свойства имеют номера, а не имена, то использовать массив логичнее, чем объект. И так далее.
    Ответ написан
    Комментировать
  • Почему не читается Json файл?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    $stage = $info[0]->{'stage'};
    Ответ написан
    Комментировать
  • Редактирование JSON файла с помощью форм на странице, как можно это сделать?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Это задание. Поэтому нужно вложиться деньгами или временем, а просто так в одном абзаце получить ответ не получится. В лучше случае вас можно отправить учиться или гуглить, но так вы начнёте тратить своё время как раз.
    Ответ написан
    Комментировать
  • Get запрос к json файлу. Что это?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Файл - это то, что лежит у вас в папке на компьютере. А в адресной строка браузера - адрес.

    По адресу Красная Площадь дом 1 может проживать какой-то определенный человек (статический ресурс). А может быть, там офис с большой текучкой кадров, и каждый день по этому адресу вы будете встречать нового человека (динамический ресурс).

    Нагуглить нужно было URL, а еще лучше URI. Там нет ничего про "расширение файла". Хотя для удобства понимания в адресе оно может фигурировать. Собственно, в адресе могут быть отражены даже реальные файлы, но ваш случай не такой.
    Ответ написан
    Комментировать
  • Как в JSON проверить, что поле существует?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Примерно так:
    var obj = res.items[0].snippet.thumbnails;
    var max_width = 0, max_height = 0, name = 'unknown';
    for(let k in obj) if (max_width < obj[k].width) {
      max_width = obj[k].width;
      max_height = obj[k].height;
      name = k;
    }
    console.log('Name: ',name,' Width: ',max_width,' Height: ',max_height);
    Ответ написан
    Комментировать
  • Функции проведения JSON?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Нет. Готовых функций нет.

    Хотя сделать такое не сложно. Главное, знать, что хотеть. Из ваших примеров это ни разу не очевидно. В них не прослеживается закономерность и куча несостыковок. Вероятно, вы очень спешили, когда их составляли. Так что я даже не уверен, что вы сами знаете, что вам нужно. Но зато я уверен, что как только вы начнете делать (или начнете составлять ТЗ), то сразу поймете, что вам нужно, а что не нужно.

    Когда сделаете свою функцию, не поленитесь вернуться в этот вопрос и проверить, насколько же сильно результат функции отличается от ваших примеров.
    Ответ написан
    2 комментария
  • Как использовать import?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Комментировать
  • Как парсить сайты с загрузкой при прокрутке?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Думаю, лучше перейти с JSOUP на чисто хром.
    Меньше шанс, что что-то сломается.
    Да и проще реализовать, не нужно копаться в (обфускированном?) коде, а достаточно работы с DOM.
    То есть просто делаешь расширение для хрома (личное) - и оно уже во вкладке парсит выдачу яндекса, одновременно прокручивая страницу для подгрузки новых изображений.
    Ответ написан
    Комментировать
  • Можно ли спарсить Json с не экранированными кавычками?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Можно попробовать исправить поломанный JSON.
    Примерно так, но это не покрывает 100% случаев из вашего вопроса
    <?php
    $str = '{"name": "my "name"", "value": "123456789"}';
    
    function fixJSON($str) {
        $len = strlen($str);
        $result = '';
        $space = '';
        $mode = 0;
        for($i=0;$i<$len;$i++){
            $c = $str[$i];
            switch ($mode) {
                case 0: //вне строки
                    if ($c == '"') $mode = 1;
                    $result .= $c;
                    break;
                case 1: //внутри строки
                    if ($c == '"') {
                        $mode = 3;
                        $space = $c;
                        break;
                    }
                    if ($c == '\\') $mode = 2;
                    $result .= $c;
                    break;
                case 2: //сразу после слеша (игнорим один любой символ)
                    $mode = 1;
                    $result .= $c;
                    break;
                case 3: //была кавычка внутри строки
                    if ($c == ' ' || $c == '\n' || $c == '\t' || $c == '\r')
                        $space .= $c;
                    elseif ($c == ',' || $c == '}' || $c == ']' || $c == ':') {
                        //вероятно был конец строки (шанс 99%)
                        $mode = 0;
                        $result .= $space.$c;
                    } else {
                        //мы остались внутри строки на 100%. Экранируем
                        $mode = 1;
                        $result .= '\\'.$space;
                        $i--; //уходим назад, т.к. вдруг это снова кавычка
                    }
                    break;
            }
        }
        return $result;
    }
    
    echo(fixJSON($str)); //{"name": "my \"name\"", "value": "123456789"}
    ?>

    Но лучше исправить то место, которое приводит к поломке JSON, чтобы оттуда к вам сразу нормальные строки приходили, а не костыли изобретать.

    P.S.
    Более совершенный и более упоротый вариант
    <?php
    $str = '{"say": ""my name", hi", "value": "123456789"}';
    
    function fixJSON($str) {
        $len = strlen($str);
        $result = '';
        $space = '';
        $mode = 0;
        for($i=0;$i<$len;$i++){
            $c = $str[$i];
            switch ($mode) {
                case 0: //вне строки
                    if ($c == '"') $mode = 1;
                    $result .= $c;
                    break;
                case 1: //внутри строки
                    if ($c == '"') {
                        $mode = 3;
                        $space = $c;
                        break;
                    }
                    if ($c == '\\') $mode = 2;
                    $result .= $c;
                    break;
                case 2: //сразу после слеша (игнорим один любой символ)
                    $mode = 1;
                    $result .= $c;
                    break;
                case 3: //была кавычка внутри строки
                    if ($c == ' ' || $c == '\n' || $c == '\t' || $c == '\r')
                        $space .= $c;
                    elseif ($c == '}' || $c == ']') {
                        //вероятно был конец строки (шанс 99%)
                        $mode = 4;
                        $space .= $c;
                    }
                    elseif ($c == ',' || $c == ':') {
                        //вероятно был конец строки (шанс 90%)
                        $mode = 5;
                        $space .= $c;
                    } else {
                        //мы остались внутри строки на 100%. Экранируем
                        $mode = 1;
                        $result .= '\\'.$space;
                        $i--; //уходим назад, т.к. вдруг это снова кавычка
                    }
                    break;
                case 4: //после спец символа
                    if ($c == ' ' || $c == '\n' || $c == '\t' || $c == '\r')
                        $space .= $c;
                    elseif ($c == ',') {
                        //был конец строки с шансом 99.99%
                        $mode = 0;
                        $result .= $space.$c;
                    } else {
                        //внтури строки на 100%
                        $mode = 1;
                        $result .= '\\'.$space;
                        $i--;
                    }
                    break;
                case 5: //после запятой
                    if ($c == ' ' || $c == '\n' || $c == '\t' || $c == '\r')
                        $space .= $c;
                    elseif (preg_match('/[0-9"-]+/', $c)) {
                        //был конец строки с шансом 99.9%
                        $mode = 0;
                        $result .= $space;
                        $i--;
                    } else {
                        //внтури строки на 100%
                        $mode = 1;
                        $result .= '\\'.$space;
                        $i--;
                    }
                    break;
            }
        }
        if ($mode>2) $result .= $space;
        return $result;
    }
    
    echo(fixJSON($str)); //{"say": "\"my name\", hi", "value": "123456789"}
    ?>
    Но всегда можно в строку засунуть другой JSON и никакой конечный фиксер не справится с такой глубиной.
    Ответ написан
    Комментировать
  • Как превратить объекты со ссылками в JSON?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Дело в том, что в JSON не может быть циклических ссылок по определению. Там даже нет переменных.

    Лучше всего вам перейти на немного другой формат данных. А именно, хранить не ссылки на объекты, а их ключи в виде строк. Такие строки-ссылки спокойно сериализуются.
    leader.soldier = "soldier";
    soldier.leader = "leader";

    Автоматически лучше не конвертировать, а именно взять такой формат за основу. Но если очень хочется, то как-то так:
    for (let key in obj) {
      if (window[key]) obj[key] = key; //любой ваш критерий
    }

    В будущем для проверки, правда, понадобится чуть усложнённый код:
    var test_leader = soldier.leader && window[soldier.leader];
    //Конечно, вместо window у вас будет свой объект-обертка

    Чтобы избавится от этого вам нужно будет всего лишь "чинить" объект после JSON.parse
    Ответ написан
    Комментировать
  • Нужно определиться со структурой неизвестной html страницы?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    var s = 'energy|{"Ts":"380158","Va":"232.00","Aa":"0.37","Pa":"56","PFa":"0.65","T0":"18.94"}|div';
    s = s.split('|');
    s[1] = JSON.parse(s[1]);
    console.log(s);
    console.log(s[1].Va); //232.00

    Соответственно, ссылка для вас будет примерно такая (должно вернуть 232.00):
    javascript:alert((e=>{var s=document.body.innerHTML; s = s.split('|'); s[1] = JSON.parse(s[1]); return s[1].Va})())

    Только не ясно, что за проблема у вас, а значит и нормальное решение предложить нельзя.
    Ответ написан
  • Каким образом парсят json с огромным содержимым?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    С сервера приходит JSON той структуры, которую вы ожидаете. Если это ваш сервер, то вы сами и формируете этот JSON, иначе структура описана в документации.

    Из строки получается так:
    var str = '{"x":123, "y":234, "z": [ 1, 2, 3 ] }';
    var obj = JSON.parse(str);
    obj.z[2]; // 3
    Ответ написан
    2 комментария
  • Как заменить символы в Json при помощи JS?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Хранить в БД числа, а не строки.

    P.S. В JavaScript можно конвертировать разными способами. Например, так:
    arr[0].min -= 0;
    arr[1].min -= 0;
    Ответ написан
    Комментировать
  • Как организовать select для JSON?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Не делать циклических ссылок
    var data = {
    	types: {
    		type_1: {
    			max_speed: 300
    		},
    		type_2: {
    			max_speed: 260
    		}
    	},
    	TC: {
    		transport_1: {
    			color: "red",
    			type: "type_2"
    		},
    		transport_2: {
    			color: "blue",
    			type: "type_1"
    		}
    	}
    }
    
    var tc = data.TC.transport_1;
    console.log("Car:", tc.color); //red
    console.log("Speed:", data.types[tc.type].max_speed); //260
    Тогда и в JSON проблем не будем
    {
    	"types": {
    		"type_1": {
    			"max_speed": 300
    		},
    		"type_2": {
    			"max_speed": 260
    		}
    	},
    	"TC": {
    		"transport_1": {
    			"color": "red",
    			"type": "type_2"
    		},
    		"transport_2": {
    			"color": "blue",
    			"type": "type_1"
    		}
    	}
    }
    Равно как и в PHP при работе с JSON
    Ответ написан
    3 комментария