Error parsing json response null перевод

Ответили на вопрос 2 человека. Оцените лучшие ответы! И подпишитесь на вопрос, чтобы узнавать о появлении новых ответов.

Пишу серверо-клиентское приложение, запросы/ответы идут в JSON (люблю с ним работать :) ) , для парсинга ответа использую библиотеку Newtonsoft.Json так вот, например ответ сервера:

{
	"status": true,
	"location": "https://ru.wargaming.net/id/openid/?openid.assoc_handle=%7BHMAC-SHA1%7D%7B53c3b656%7D%7BdbdXfQ%3D%3D%7D&openid.ax.if_available=ext0%2Cext1%2Cext2&openid.ax.mode=fetch_request&openid.ax.type.ext0=http%3A%2F%2Faxschema.openid.wargaming.net%2Fspa%2Fid&openid.ax.type.ext1=http%3A%2F%2Faxschema.org%2FnamePerson%2Ffriendly&openid.ax.type.ext2=http%3A%2F%2Faxschema.openid.wargaming.net%2Fidentity%2Fsso%2Fnotifications%2Fdisable&openid.claimed_id=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select&openid.identity=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select&openid.mode=checkid_setup&openid.ns=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0&openid.ns.ax=http%3A%2F%2Fopenid.net%2Fsrv%2Fax%2F1.0&openid.realm=https%3A%2F%2Fapi.worldoftanks.ru%2F&openid.return_to=https%3A%2F%2Fapi.worldoftanks.ru%2Fid%2Fcomplete%2F%3Fredirect_uri%3Dhttps%253A%252F%252Fapi.worldoftanks.ru%252Fwot%252Fblank%252F%26application_id%3D0775c3d2e437b4d3a2e386036571e297%26expires_at%3D1407221921%26janrain_nonce%3D2014-07-22T06%253A58%253A41ZepFnu1"}d/openid/?openid.assoc_handle=%7BHMAC-SHA1%7D%7B53c3b656%7D%7BdbdXfQ%3D%3D%7D&openid.ax.if_available=ext0%2Cext1%2Cext2&openid.ax.mode=fetch_request&openid.ax.type.ext0=http%3A%2F%2Faxschema.openid.wargaming.net%2Fspa%2Fid&openid.ax.type.ext1=http%3A%2F%2Faxschema.org%2FnamePerson%2Ffriendly&openid.ax.type.ext2=http%3A%2F%2Faxschema.openid.wargaming.net%2Fidentity%2Fsso%2Fnotifications%2Fdisable&openid.claimed_id=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select&openid.identity=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select&openid.mode=checkid_setup&openid.ns=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0&openid.ns.ax=http%3A%2F%2Fopenid.net%2Fsrv%2Fax%2F1.0&openid.realm=https%3A%2F%2Fapi.worldoftanks.ru%2F&openid.return_to=https%3A%2F%2Fapi.worldoftanks.ru%2Fid%2Fcomplete%2F%3Fredirect_uri%3Dhttps%253A%252F%252Fapi.worldoftanks.ru%252Fwot%252Fblank%252F%26application_id%3D0775c3d2e437b4d3a2e386036571e297%26expires_at%3D1407221921%26janrain_nonce%3D2014-07-22T06%253A58%253A41ZepFnu1"}d/openid/?openid.assoc_handle=%7BHMAC-SHA1%7D%7B53c3b656%7D%7BdbdXfQ%3D%3D%7D&openid.ax.if_available=ext0%2Cext1%2Cext2&openid.ax.mode=fetch_request&openid.ax.type.ext0=http%3A%2F%2Faxschema.openid.wargaming.net%2Fspa%2Fid&openid.ax.type.ext1=http%3A%2F%2Faxschema.org%2FnamePerson%2Ffriendly&openid.ax.type.ext2=http%3A%2F%2Faxschema.openid.wargaming.net%2Fidentity%2Fsso%2Fnotifications%2Fdisable&openid.claimed_id=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select&openid.identity=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select&openid.mode=checkid_setup&openid.ns=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0&openid.ns.ax=http%3A%2F%2Fopenid.net%2Fsrv%2Fax%2F1.0&openid.realm=https%3A%2F%2Fapi.worldoftanks.ru%2F&openid.return_to=https%3A%2F%2Fapi.worldoftanks.ru%2Fid%2Fcomplete%2F%3Fredirect_uri%3Dhttps%253A%252F%252Fapi.worldoftanks.ru%252Fwot%252Fblank%252F%26application_id%3D0775c3d2e437b4d3a2e386036571e297%26expires_at%3D1407221921%2"
}

Для удобства чтения отформатировал.

Так вот, при парсинге JObject’ом (функция JObject.Parse(json)) у меня вылетает исключение:

Необработанное исключение типа "Newtonsoft.Json.JsonReaderException" произошло в Newtonsoft.Json.dll

Дополнительные сведения: Additional text encountered after finished reading JSON content: . Path '', line 1, position 1175.

Причем такое происходит в любых ответах сервера (содержимое которых сильно отличается), изменяется только позиция и «<какой-то символ>.Path».

В чем проблема? Я уже всячески обрабатывал строку как на сервере так и на клиенте, толку 0.
Причем странность: Ту-же строку (прямо из клиента выводом перед парсингом брал) например Notepad++ с плагином JSON Viewer спокойно парсит.

P.s. И да, на сервере JSON строка собирается тем-же JObject’ом.

UPD. Я покопался дебаггером, и обнаружил:
86c44ccec730483988606175bae34b02.png
Откуда ответ забивается «»?

15.02.2018, 11:49. Показов 3781. Ответов 6


Здравствуйте уважаемые форумчане. Столкнулся с проблемой, которую решить пока не могу.
На сайте большинство получение данных происходит через ajax.
Так вот, самое интересное, что у большинства людей работает все нормально, но есть некоторые у которых json.parse() выдает ошибку. Причем этот человек может с одного компьютера сидеть и все работает нормально, а с другого у него ошибку выдает.
И так. Пример…
Получаю список оценок за комментарии:

Javascript
1
2
3
4
5
6
7
8
9
function QuoteNotif(type) {
ajax({
   method: 'POST',
   action: 'QuoteNotif',
   data: {
    type:type
    }
});
}

Далее php начинает обработку и формирование json

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
function QuoteNotif($ajax, $errors) {
       $sql = DbMysql::getInstance();
       $func = new Options(); 
       
        if($_REQUEST['type'] == '1'){
        $quote_user_sql = $sql->run("select *,date_format(date,'%d %b %Y %H:%i:%s') as date from ".MY_PREFIX."_QuoteNotification where user_id = ? order by id DESC",array($_SESSION['ID']));
        }else{
        $quote_user_sql = $sql->run("select *,date_format(date,'%d %b %Y %H:%i:%s') as date from ".MY_PREFIX."_Notification where toUserId = ? order by id DESC",array($_SESSION['ID']));
        } 
        
      if($quote_user_sql->rowCount() > 0){
        while($Rows = $quote_user_sql->fetch()){
        $title = $func->GetOne("title","".MY_PREFIX."_news","id",$Rows['news_id']);
        if($_REQUEST['type'] == '1'){ $Rows['text'] = '0';
        $link = '/news/'.$Rows['news_id'].'/'.$Rows['id'].'/'.$Rows['id_com'].'/quote/#msg'.$Rows['id_com'];
        }else{
        if($Rows['type']){$txt="msg";}else{$txt="quote";}$Rows['username'] = $Rows['fromUsername'];
        $msgCom = $func->GetOne("quote_id","".MY_PREFIX."_comments","id",$Rows['idCom']);
        $link = '/news/'.$Rows['news_id'].'/'.$Rows['id'].'/'.$msgCom.'/notif/#'.$txt.$Rows['idCom'];
        }
        $res[] = array("id" =>$Rows['id'], "username" => $Rows['username'], "link" => $link, "title" =>$title, "text" =>$Rows['text'], "date" => $Rows['date']);
        }
 
        }else{
        $res = '0';
        }
        $ajax->response['data'] = array("NOTIF" => $res, "TYPE" => $_REQUEST['type']);
       if (!$errors->exist()) $ajax->response['action'] = 'QuoteNotifReturn'; // JS Функция будет вызвана на стороне клиента в случае успешного ответа от сервера
 
     }

И теперь пытаемся принять объект

Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
function ajax(params) { // Описываем функцию отправки запроса
  params.data.action = params.action;
  delete params.action;
  params.url = '/systemDir/classes/ajax.php'; // Путь до файла с нашими функциями
  params.error = function(xhr, err) {
  var responseTitle= $(xhr.responseText).filter('title').get(0);
   $('#newNews').fadeIn(500);
   $('#newNews').html($(responseTitle).text() + "n" + formatErrorMessage(xhr, err) );
   setTimeout(function(){$('#newNews').fadeOut(500);}, 3000);
  }
  var request = $.ajax(params);
  request.then(function(response) {
    try {
            var json = JSON.parse(response);
            if (json.errors) {
           // Обработчик ошибок
           errorFunction(json.errors);
           }
           if (json.action) window[json.action](json.data); // Запускаем коллбек с полученными данными в качестве параметра
        } catch (e) {
            // is not a valid JSON string
    $('#newNews').fadeIn(500);
    $('#newNews').html("Обработка JSON - не удалось распарсить.<br /> Пожалуйста, сообщите об ошибке администратору!");
    setTimeout(function(){$('#newNews').fadeOut(500);}, 5000);
        }
 
    });
 
}

Так вот… В большинстве случаев все и у всех работает нормально, но вот есть люди, у которых вылетает «Обработка JSON — не удалось распарсить»

Я пробовал к одному такому подключаться удаленно и смотрел что происходит в браузере.
А ничего необычного! Вот пример того что получаю я, у меня все работает (копировал из браузера из дебага на вкладке responce):

JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
{,}
action
:
"QuoteNotifReturn"
data
:
{NOTIF: [{id: "139821", username: "Dan", link: "/news/77278/139821/903190/notif/#quote903196",}],}
NOTIF
:
[{id: "139821", username: "Dan", link: "/news/77278/139821/903190/notif/#quote903196",}]
0
:
{id: "139821", username: "Dan", link: "/news/77278/139821/903190/notif/#quote903196",}
date
:
"15 Feb 2018 10:42:20"
id
:
"139821"
link
:
"/news/77278/139821/903190/notif/#quote903196"
text
:
"Dan оценил ваш ответ (<span style="color:green;">+ 1</span> балл)."
title
:
"Тестовая новость"
username
:
"Dan"
TYPE
:
"2"
errors
:
""

И вот что у того человека:

JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
{,}
action
:
"QuoteNotifReturn"
data
:
{NOTIF: [{id: "139768", username: "Kon", link: "/news/77278/139768/0/notif/#msg902945",},],}
NOTIF
:
[{id: "139768", username: "Kon", link: "/news/77278/139768/0/notif/#msg902945",},]
0
:
{id: "139768", username: "Kon", link: "/news/77278/139768/0/notif/#msg902945",}
date
:
"15 Feb 2018 05:07:01"
id
:
"139768"
link
:
"/news/77278/139768/0/notif/#msg902945"
text
:
"Kon оценил ваш комментарий (<span style="color:green;">+ 1</span> балл)."
title
:
"Тестовая новость"
username
:
"Kon"
1
:
{id: "139754", username: "Витян", link: "/news/77278/139754/902857/notif/#quote902909",}
date
:
"14 Feb 2018 23:23:57"
id
:
"139754"
link
:
"/news/77278/139754/902857/notif/#quote902909"
text
:
"Витян оценил ваш ответ (<span style="color:green;">+ 1</span> балл)."
title
:
"Тестовая новость"
username
:
"Витян"
TYPE
:
"2"
errors
:
""

У него выдает ошибку json.

Но дама, на компьютере он говорит что все работает как надо. В браузере ctrl+f5 не помогает. Думал может файлы старые из кэша работают и мешают выполнению, но не помогает…
Всю голову сломал, помогите советом, что может быть?

Добавлено через 6 минут
Ах да… Нужно показать как json формируется

PHP
1
2
3
4
5
6
7
Class Ajax {
  public $response = ['data' => '', 'errors' => '', 'action' => '']; // Структура ответа. В data будет храниться ответ, в errors - ошибки, в action - функция, которая будет вызвана в JS после ответа от сервера
 
  function send() {
    echo json_encode($this->response, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_UNESCAPED_UNICODE); // Ответ от сервера будет сериализован в формат JSON
  }
}

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



Corpus name: OpenSubtitles2018. License: not specified. References: http://opus.nlpl.eu/OpenSubtitles2018.php, http://stp.lingfil.uu.se/~joerg/paper/opensubs2016.pdf

Corpus name: OpenSubtitles2018. License: not specified. References: http://opus.nlpl.eu/OpenSubtitles2018.php, http://stp.lingfil.uu.se/~joerg/paper/opensubs2016.pdf

Corpus name: OpenSubtitles2018. License: not specified. References: http://opus.nlpl.eu/OpenSubtitles2018.php, http://stp.lingfil.uu.se/~joerg/paper/opensubs2016.pdf

Corpus name: OpenSubtitles2018. License: not specified. References: http://opus.nlpl.eu/OpenSubtitles2018.php, http://stp.lingfil.uu.se/~joerg/paper/opensubs2016.pdf

Corpus name: OpenSubtitles2018. License: not specified. References: http://opus.nlpl.eu/OpenSubtitles2018.php, http://stp.lingfil.uu.se/~joerg/paper/opensubs2016.pdf

Corpus name: OpenSubtitles2018. License: not specified. References: http://opus.nlpl.eu/OpenSubtitles2018.php, http://stp.lingfil.uu.se/~joerg/paper/opensubs2016.pdf

Corpus name: OpenSubtitles2018. License: not specified. References: http://opus.nlpl.eu/OpenSubtitles2018.php, http://stp.lingfil.uu.se/~joerg/paper/opensubs2016.pdf

Corpus name: OpenSubtitles2018. License: not specified. References: http://opus.nlpl.eu/OpenSubtitles2018.php, http://stp.lingfil.uu.se/~joerg/paper/opensubs2016.pdf

Corpus name: OpenSubtitles2018. License: not specified. References: http://opus.nlpl.eu/OpenSubtitles2018.php, http://stp.lingfil.uu.se/~joerg/paper/opensubs2016.pdf

Corpus name: OpenSubtitles2018. License: not specified. References: http://opus.nlpl.eu/OpenSubtitles2018.php, http://stp.lingfil.uu.se/~joerg/paper/opensubs2016.pdf

Corpus name: OpenSubtitles2018. License: not specified. References: http://opus.nlpl.eu/OpenSubtitles2018.php, http://stp.lingfil.uu.se/~joerg/paper/opensubs2016.pdf

Corpus name: OpenSubtitles2018. License: not specified. References: http://opus.nlpl.eu/OpenSubtitles2018.php, http://stp.lingfil.uu.se/~joerg/paper/opensubs2016.pdf

Corpus name: OpenSubtitles2018. License: not specified. References: http://opus.nlpl.eu/OpenSubtitles2018.php, http://stp.lingfil.uu.se/~joerg/paper/opensubs2016.pdf

Corpus name: OpenSubtitles2018. License: not specified. References: http://opus.nlpl.eu/OpenSubtitles2018.php, http://stp.lingfil.uu.se/~joerg/paper/opensubs2016.pdf

Corpus name: OpenSubtitles2018. License: not specified. References: http://opus.nlpl.eu/OpenSubtitles2018.php, http://stp.lingfil.uu.se/~joerg/paper/opensubs2016.pdf

Corpus name: OpenSubtitles2018. License: not specified. References: http://opus.nlpl.eu/OpenSubtitles2018.php, http://stp.lingfil.uu.se/~joerg/paper/opensubs2016.pdf

Corpus name: OpenSubtitles2018. License: not specified. References: http://opus.nlpl.eu/OpenSubtitles2018.php, http://stp.lingfil.uu.se/~joerg/paper/opensubs2016.pdf

Corpus name: OpenSubtitles2018. License: not specified. References: http://opus.nlpl.eu/OpenSubtitles2018.php, http://stp.lingfil.uu.se/~joerg/paper/opensubs2016.pdf

Corpus name: OpenSubtitles2018. License: not specified. References: http://opus.nlpl.eu/OpenSubtitles2018.php, http://stp.lingfil.uu.se/~joerg/paper/opensubs2016.pdf

Corpus name: OpenSubtitles2018. License: not specified. References: http://opus.nlpl.eu/OpenSubtitles2018.php, http://stp.lingfil.uu.se/~joerg/paper/opensubs2016.pdf

Сообщение

SyntaxError: JSON.parse: unterminated string literal
SyntaxError: JSON.parse: bad control character in string literal
SyntaxError: JSON.parse: bad character in string literal
SyntaxError: JSON.parse: bad Unicode escape
SyntaxError: JSON.parse: bad escape character
SyntaxError: JSON.parse: unterminated string
SyntaxError: JSON.parse: no number after minus sign
SyntaxError: JSON.parse: unexpected non-digit
SyntaxError: JSON.parse: missing digits after decimal point
SyntaxError: JSON.parse: unterminated fractional number
SyntaxError: JSON.parse: missing digits after exponent indicator
SyntaxError: JSON.parse: missing digits after exponent sign
SyntaxError: JSON.parse: exponent part is missing a number
SyntaxError: JSON.parse: unexpected end of data
SyntaxError: JSON.parse: unexpected keyword
SyntaxError: JSON.parse: unexpected character
SyntaxError: JSON.parse: end of data while reading object contents
SyntaxError: JSON.parse: expected property name or '}'
SyntaxError: JSON.parse: end of data when ',' or ']' was expected
SyntaxError: JSON.parse: expected ',' or ']' after array element
SyntaxError: JSON.parse: end of data when property name was expected
SyntaxError: JSON.parse: expected double-quoted property name
SyntaxError: JSON.parse: end of data after property name when ':' was expected
SyntaxError: JSON.parse: expected ':' after property name in object
SyntaxError: JSON.parse: end of data after property value in object
SyntaxError: JSON.parse: expected ',' or '}' after property value in object
SyntaxError: JSON.parse: expected ',' or '}' after property-value pair in object literal
SyntaxError: JSON.parse: property names must be double-quoted strings
SyntaxError: JSON.parse: expected property name or '}'
SyntaxError: JSON.parse: unexpected character
SyntaxError: JSON.parse: unexpected non-whitespace character after JSON data

Тип ошибки

Что пошло не так?

JSON.parse() обрабатывает (парсит) строку в формате JSON. Это строка должна соответствовать формату, иначе будет выведена ошибка, что был нарушен синтаксис.

Examples

JSON.parse() не допускает запятые

Метод JSON.parse() не разрешает использование, так называемых, trailling запятых.

Обе строки выдадут ошибку типа SyntaxError:

JSON.parse('[1, 2, 3, 4,]');
JSON.parse('{"foo": 1,}');
// SyntaxError JSON.parse: unexpected character
// at line 1 column 14 of the JSON data

Необходимо убрать последние запятые в строках и тогда ошибки не будет:

JSON.parse('[1, 2, 3, 4]');
JSON.parse('{"foo": 1}');

Названия свойств должны быть в двойных кавычках

Вы не можете использовать одинарные кавычки в именах свойств. Например, ‘foo’.

JSON.parse("{'foo': 1}");
// SyntaxError: JSON.parse: expected property name or '}'
// at line 1 column 2 of the JSON data

Вместо этого необходимо написать «foo»:

JSON.parse('{"foo": 1}');

Незначащие нули или плавающая точка без последующей цифры

Вы не можете использовать незначащие нули, например, 01. Плавающая точка должна всегда сопровождаться хотя бы одной цифрой после неё.

JSON.parse('{"foo": 01}');
// SyntaxError: JSON.parse: expected ',' or '}' after property value
// in object at line 1 column 2 of the JSON data

JSON.parse('{"foo": 1.}');
// SyntaxError: JSON.parse: unterminated fractional number
// at line 1 column 2 of the JSON data

Вместо этого напишите просто 1 без нуля и используйте хотя бы одну цифру после точки:

JSON.parse('{"foo": 1}');
JSON.parse('{"foo": 1.0}');

Смотрите также

  1. 26.08.2015, 06:46


    #1

    s239869 вне форума


    Junior Member


    По умолчанию JSON Parse Error. Func: «pricelist.edit»

    Добрый день!

    Проблема с использованием Billmanager последней бета-версии.

    При редактировании тарифных планов или типов продуктов, в момент сохранения и передачи изменений на сервер всплывает ошибка

    JSON Parse Error. Func: «pricelist.edit»

    Методом тыка, выявили что ошибка возникает только при обращении к панели billmgr через url с символом «-» ( в доменном имени ).
    Если заходить по IP-адресу или другому доменному имени без символа «-» то всё сохраняет без ошибок.
    Используем порт https вместо 1500.


  2. 26.08.2015, 12:35


    #2

    t.sidorenko вне форума


    BILLmanager team


    По умолчанию

    Добрый день!

    К сожалению на тестовых машинах не воспроизвелось описанное Вами поведение.
    Вероятно проблема воспроизводится при дополнительных параметрах. Не могли бы вы уточнить, какой язык используется, на всех ли тарифах такое поведение, или на каком то одном типе тарифов, либо продуктов. Также может иметь значение непосредственно изменяемый параметр.


  3. 26.08.2015, 18:33


    #3

    s239869 вне форума


    Junior Member


    По умолчанию

    Цитата Сообщение от t.sidorenko
    Посмотреть сообщение

    Добрый день!
    Не могли бы вы уточнить, какой язык используется, на всех ли тарифах такое поведение, или на каком то одном типе тарифов, либо продуктов. Также может иметь значение непосредственно изменяемый параметр.

    Решил проблему, она была как-то связана с добавленным мной для своего типа продукта /usr/local/mgr5/etc/xslt/itemname_exampletype.xsl

    После его удаления и очистки кеша проблема исчезла.

    Не думал что в этом причина , так как же без «-» проблема не вылезала.

    Спасибо!


  4. 30.08.2015, 19:49


    #4

    s239869 вне форума


    Junior Member


    По умолчанию

    Уточненные данные по проблеме.
    При прошлом тестировании не совсем гладко были протестированы варианты.
    Похоже, что указанная выше ошибка случается при использовании CloudFlare в качестве фронтенда, напрямую взаимодействующего с ihttpd на 443 порту.

    Сейчас поймал эту ошибку,при попытке снять галочку в таблице «сотрудники»
    после прописывания hostname панели в файл hosts ( в обход cloudflare ) проблема исчезает, после возвращения трафика на clourfire появляется.

    Могли бы вы дать рекомендации по устранению этой проблемы?
    ( кроме вариантов воткнуть промежуточный nginx )


  5. 02.09.2015, 15:43


    #5

    s239869 вне форума


    Junior Member


    По умолчанию


  6. 02.09.2015, 16:36


    #6

    jeremy вне форума


    ISPsystem team


    По умолчанию

    Посмотрите, что там в ответ на это запрос приходит. В разработчике хрома например http://commandlinefanatic.com/cgi-bi…article=art034


  7. 28.05.2016, 18:53


    #7

    Gloome вне форума


    Senior Member


    По умолчанию

    Столкнулся с той же проблемой, только через не в ценах, а при сохранении изменений «Редактирование информации о сотруднике»
    Выдает ошибку JSON Parse Error. Func: «employee.edit»
    Chrome console выдает

    jsonParseError app-desktop.min.js?v=5.56.0-2016.05.05_12:52&r=:106

    Основной порт BillManager — 1400
    Захожу через https://dom.exmp.ru
    Если заходить через https://dom.exmp.ru:1400 то проблемы нет


  8. 30.05.2016, 09:40


    #8

    jeremy вне форума


    ISPsystem team


    По умолчанию

    Во вкладке Network посмотрите этот запрос, что там прилетает в ответе.


  9. 30.05.2016, 15:48


    #9

    Gloome вне форума


    Senior Member


    По умолчанию

    В какой именно вкладке?
    Headers, Preview, Response?

    Последний раз редактировалось Gloome; 30.05.2016 в 18:03.


  10. 31.05.2016, 07:57


    #10

    jeremy вне форума


    ISPsystem team


    По умолчанию


Урок, в котором рассматривается, что такое JSON и какие он имеет преимущества по сравнению с другими форматами данных.

JSON (JavaScript Object Notation) – это текстовый формат представления данных в нотации объекта JavaScript. Предназначен JSON, также как и некоторые другие форматы такие как XML и YAML, для обмена данными.

JavaScript – Что такое JSON

Несмотря на своё название, JSON можно использовать не только в JavaScript, но и в любом другом языке программирования.

JSON по сравнению с другими форматами также обладает достаточно весомым преимуществом. Он в отличие от них является более компактным, а это очень важно при обмене данными в сети Интернет. Кроме этого, JSON более прост в использовании, его намного проще читать и писать.

При веб-разработке JSON очень часто применяется в качестве формата для передачи информации от веб-сервера клиенту (веб-браузеру) при AJAX запросе.

Как выглядит этот процесс? Его можно представить в виде двух шагов. На первом шаге, сервер, по запросу пришедшему ему от клиента, сначала формирует некоторый набор данных в удобном формате, который затем можно было бы очень просто упаковать в строку JSON. Завершается работа на сервере отправкой JSON данных в качестве результата клиенту. На втором шаге, клиент получает в качестве ответа от сервера строку JSON и распаковывает её, т.е. переводит в JavaScript объект. После этого на клиенте выполняются дальнейшие с ними действия, например, выводятся на страницу.

Это один из примеров использования формата JSON. Но его применение не ограничивается только этим сценарием, их очень много и не только в веб.

В JSON, в отличие от XML и YAML, данные организованы также как в объекте JavaScript. Но JSON – это не объект, а строка. При этом не любой объект JavaScript может быть переведён один к одному в JSON. Например, если у объекта есть методы, то они при преобразовании в строку JSON будут проигнорированы и не включены в неё.

Структура формата JSON

Структура строки JSON практически ничем не отличается от записи JavaScript объекта.

Она состоит из набора пар ключ-значения. В этой паре ключ отделяется от значения с помощью знака двоеточия (:), а одна пара от другой — с помощью запятой (,). При этом ключ в JSON, в отличие от объекта обязательно должен быть заключен в двойные кавычки. Это первое отличие JSON от JavaScript объекта. В объекте ключ (имя свойства) не обязательно следует заключать в двойные кавычки.

Например:

// строка JSON
var jsonPerson = '{"name":"Иван","age":25}';

// объект JavaScript
var person = {
  name: "Иван",
  age: 25
};

Чтобы не усложнять доступ к данным, при задании ключам имён лучше придерживаться тех же правил, что и при именовании переменных.

Второе отличие заключается в том, что значение ключа в JSON можно задать только в одном из следующих форматов: string (строкой), number (числом), object (объектом), array (массивом), boolean (логическим значением true или false) или null (специальным значением JavaScript). Например, значение ключа в JSON не может быть функцией или датой (объектом типа Date).

// объект JavaScript
var person = {
  name: "Иван",
  birthDay: new Date(Date.UTC(1985, 03, 05)),
  getAge: function () {
    var ageDate = new Date(Date.now() - this.birthDay.getTime());
    return Math.abs(ageDate.getUTCFullYear() - 1970);
  }
};

// строка JSON
var jsonPerson = '{"name":"Иван","birthDay":"1985-04-05T00:00:00.000Z"}';

Пример JSON строки, состоящей из различных типов данных:

{
  "name": "Иван",
  "age": 37,
  "mother": {
    "name": "Ольга",
    "age": 58
  },
  "children": [
    "Маша",
    "Игорь",
    "Таня"
  ],
  "married": true,
  "dog": null
}

В ней ключ «name» имеет в качестве значения строку, «age» — число, «mother» — объект, состоящий из «name» и «age», «children» — массив, «married» — логический тип, «dog» — null.

При этом стоит обратить внимание на то, что JSON не допускает использование внутри своей структуры комментариев.

Работа с JSON в JavaScript

Как было уже отмечено выше, JSON – это строка.

// переменная personData, содержит в качестве значения строку в формате JSON
var personData = '{"name":"Иван","age":37,"mother":{"name":"Ольга","age":58},"children":["Маша","Игорь","Таня"],"married": true,"dog":null}';

Работа с JSON в JavaScript обычно осуществляется в двух направлениях:

  • перевод строки JSON в объект (данный процесс ещё называют парсингом);
  • конвертирование объекта в строку JSON (другими словами действие обратное парсингу).

Парсинг JSON

Парсинг JSON (перевод строки JSON в объект JavaScript) осуществляется с помощью метода eval или parse.

Пример использования eval для парсинга JSON:

var person = eval('('+personData+')');

Метод eval не рекомендуется использовать так как он не безопасен. Так если кто-то сможет добавить скрипт в строку JSON, то он выполнится.

В JavaScript для парсинга строки в JSON рекомендуется использовать метод JSON.parse. Он такой уязвимости не имеет.

Использование метода JSON.parse:

// переменная person - это объект JavaScript, который получен путём парсинга строки JSON
var person = JSON.parse(personData);

Конвертирование объекта JavaScript в строку JSON

Перевод объекта JavaScript в строку JSON осуществляется с помощью метода JSON.stringify. Данный метод осуществляет действие обратное методу JSON.parse.

var personString = JSON.strigify(person);

Преимущества формата JSON

Формат представления данных JSON имеет следующие преимущества:

  • удобные и быстрые в работе методы, предназначенные для конвертации (парсинга) строки JSON в объект JavaScript и обратно;
  • понятная и простая структура данных;
  • очень маленький размер по сравнению с другими форматами данных (например XML). Это связано с тем, что формат JSON содержит минимальное возможное форматирование, т.е. при его написании используется всего несколько специальных знаков. Это очень важное преимущество, т.к. данные представленные в формате JSON будут быстрее загружаться, чем, если бы они были бы представлены в других форматах.

Из-за того что данный формат имеет очень много преимуществ он стал применяться не только в JavaScript, но и во многих других языках, таких как C, Ruby, Perl, Python, PHP и т.д.

Сравнение форматов JSON и XML

Формат JSON имеет следующие преимущества перед форматом XML:

  1. При передаче некоторых данных размер JSON будет значительно меньше, чем размер XML.
  2. JSON имеет более удобные методы конвертации в структуры данных JavaScript, чем XML.
  3. JSON более просто создавать, чем XML.

Формат JSON против XML

Работа с данными JSON после парсинга

Работа с данными JSON после парсинга осуществляется как с объектом JavaScript.

//JSON
var personData = '{"name":"Иван","age":37,"mother":{"name":"Ольга","age":58},"children":["Маша","Игорь","Таня"],"married": true,"dog": null}';
//Объект JavaScript person
var person = JSON.parse(personData);

Рассмотрим основные моменты:

//получить значения ключа (свойства) name
person.name;
person["name"];
//получить значения ключа (свойства) name, находящегося в объекте mother
person.mother.name;
//удалить элемент age
delete(person.age)
//добавить (или обновить) ключ (свойство)
person.eye = "карие";
//при работе с массивами необходимо использовать методы, предназначенные для работы именно с массивами
//удалить 1 элементиз массива (метод splice)
person.children.splice(1,1)
//добавить элемент в массив (метод push)
person.children.push("Катя");

Работа с данными JSON после парсинга

Для перебора элементов в объекте можно использовать цикл for..in:

for (key in person) {
  if (person.hasOwnProperty(key)) {
    //ключ = key
    //значение = person[key]
    console.log("Ключ = " + key);
    console.log("Значение = " + person[key]);
  } // если объект person имеет key (если у person есть свойство key)
} // перерабрать все ключи (свойства) в объекте

JavaScript - Перебор элементов в объекте

Для перебора элементов массива можно использовать следующий цикл:

for (var i=0; i<=person.children.length-1; i++) {
 // if (person.children[i].hasOwnProperty(key)) {
    //i = индекс
    //значение = person.children[i]
    console.log("Элемент [ "+ i +" ] = " + person.children[i]);
 // }

JavaScript - Перебор элементов массива

Понравилась статья? Поделить с друзьями:
  • Error parsing integrity attribute
  • Error parsing infinity value
  • Error parsing http request header spring boot
  • Error parsing http request header java io eofexception null
  • Error parsing http 413 response body invalid character