powered by simpleCommunicator - 2.0.37     © 2025 Programmizd 02
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Parsing JSONs
19 сообщений из 19, страница 1 из 1
Parsing JSONs
    #39337862
Nadirbek Nurlybekov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, коллеги! Есть проблема с парсингом json-ов, сгенерированых с помощью метода %ToJSON() системного класса %ZEN.proxyObject. После того, как клиент получил данные, выводится ошибка

Код: plaintext
"Error: JSON.parse: bad escaped character at line 5 column 19 of the JSON data".
Код метода на клиенте:
Код: plaintext
1.
$http.get("/rest/json/persons").then(function(response) {
  $scope.persons = response.data; }); 
Генерация json-ов на сервере:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
  set status = $$$OK
  try
  {
    set persons = ##class(User.Person).GetPersons()
    set proxy = ##class(%ZEN.proxyObject).%New()
    set proxy.data = persons
    do proxy.%ToJSON()
  } catch exception {
    set status = exception.AsStatus()
  }
  quit status
...
Рейтинг: 0 / 0
Parsing JSONs
    #39337914
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nadirbek Nurlybekov , так ты вызови ту страничку прямо в браузере и посмотри чего там тебе нагененрили... ;)
...
Рейтинг: 0 / 0
Parsing JSONs
    #39337922
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nadirbek Nurlybekov ,

По умолчанию %ToJSON() использует формат "aelotw". Попробуйте "aelotwu".
Код: plaintext
u - output pre-converted to UTF-8 instead of in native internal format
...
Рейтинг: 0 / 0
Parsing JSONs
    #39337927
Nadirbek Nurlybekov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
krvsa,

В браузере ничего не выводится. В консоли браузера выводится та ошибка.
...
Рейтинг: 0 / 0
Parsing JSONs
    #39337954
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nadirbek Nurlybekovkrvsa,

В браузере ничего не выводится. В консоли браузера выводится та ошибка.Для тестирования браузер необязателен: 17321595
Смотрите что формируется на сервере прямо на сервере.
...
Рейтинг: 0 / 0
Parsing JSONs
    #39338014
Nadirbek Nurlybekov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
servit,

Сгенерацией json-ов нет проблем. Именно с парсинг не работает на клиенте. Вот что мне выдал сервер:
{
"data":[ {
"Name":"Black,Susan G.",
"Login":"black",
"Password":"vØ\x02$aÉ¥ÕOùû¤F",
"PathPhoto":"J2668"
}, {
"Name":"Klausner,Charlotte U.",
"Login":"klausner",
"Password":"vØ\x02$aÉ¥ÕOùû¤F",
"PathPhoto":"G1880"
}, {
"Name":"Johnson,Frances Z.",
"Login":"johnson",
"Password":"vØ\x02$aÉ¥ÕOùû¤F",
"PathPhoto":"J1233"
}, {
"Name":"Alibaba",
"Login":"Alibaba",
"Password":"Alibaba",
"PathPhoto":""
}, {
"Name":"Nadirbek",
"Login":"Nadirbek",
"Password":"Nadirbek",
"PathPhoto":""
}, {
"Name":"Nadirbek",
"Login":"Nadirbek",
"Password":"Nadirbek",
"PathPhoto":""
}, {
"Name":"Alibaba",
"Login":"Alibaba",
"Password":"Alibaba",
"PathPhoto":""
}, {
"Name":"Alibaba",
"Login":"789789",
"Password":"798798",
"PathPhoto":""
}
]
}
...
Рейтинг: 0 / 0
Parsing JSONs
    #39338036
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nadirbek NurlybekovВ браузере ничего не выводится.
Так ты не тот адрес поди смотришь... Ты указывай адрес своего запроса.
...
Рейтинг: 0 / 0
Parsing JSONs
    #39338042
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nadirbek Nurlybekovservit,
Вот что мне выдал сервер:
Код: 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.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
{
        "data":[ {
                        "Name":"Black,Susan G.",
                        "Login":"black",
                        "Password":"vØ\x02$aÉ¥ÕOùû¤F",
                        "PathPhoto":"J2668"
                }, {
                        "Name":"Klausner,Charlotte U.",
                        "Login":"klausner",
                        "Password":"vØ\x02$aÉ¥ÕOùû¤F",
                        "PathPhoto":"G1880"
                }, {
                        "Name":"Johnson,Frances Z.",
                        "Login":"johnson",
                        "Password":"vØ\x02$aÉ¥ÕOùû¤F",
                        "PathPhoto":"J1233"
                }, {
                        "Name":"Alibaba",
                        "Login":"Alibaba",
                        "Password":"Alibaba",
                        "PathPhoto":""
                }, {
                        "Name":"Nadirbek",
                        "Login":"Nadirbek",
                        "Password":"Nadirbek",
                        "PathPhoto":""
                }, {
                        "Name":"Nadirbek",
                        "Login":"Nadirbek",
                        "Password":"Nadirbek",
                        "PathPhoto":""
                }, {
                        "Name":"Alibaba",
                        "Login":"Alibaba",
                        "Password":"Alibaba",
                        "PathPhoto":""
                }, {
                        "Name":"Alibaba",
                        "Login":"789789",
                        "Password":"798798",
                        "PathPhoto":""
                }
        ]
}


Вполне вменяемый вариант... Все работает нормально

Код: 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.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
var obj={
	"data":[ 
		{
			"Name":"Black,Susan G.",
			"Login":"black",
			"Password":"vØ\x02$aÉ¥ÕOùû¤F",
			"PathPhoto":"J2668"
		}, {
			"Name":"Klausner,Charlotte U.",
			"Login":"klausner",
			"Password":"vØ\x02$aÉ¥ÕOùû¤F",
			"PathPhoto":"G1880"
		}, {
			"Name":"Johnson,Frances Z.",
			"Login":"johnson",
			"Password":"vØ\x02$aÉ¥ÕOùû¤F",
			"PathPhoto":"J1233"
		}, {
			"Name":"Alibaba",
			"Login":"Alibaba",
			"Password":"Alibaba",
			"PathPhoto":""
		}, {
			"Name":"Nadirbek",
			"Login":"Nadirbek",
			"Password":"Nadirbek",
			"PathPhoto":""
		}, {
			"Name":"Nadirbek",
			"Login":"Nadirbek",
			"Password":"Nadirbek",
			"PathPhoto":""
		}, {
			"Name":"Alibaba",
			"Login":"Alibaba",
			"Password":"Alibaba",
			"PathPhoto":""
		}, {
			"Name":"Alibaba",
			"Login":"789789",
			"Password":"798798",
			"PathPhoto":""
		}
	]
};
console.log(obj);
...
Рейтинг: 0 / 0
Parsing JSONs
    #39338043
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nadirbek NurlybekovСгенерацией json-ов нет проблем. Именно с парсинг не работает на клиенте. Вот что мне выдал сервер:И как видим сервер сгенерировал поле Password с кракозябрами. Подозреваю, что это бинарные данные.
Это при каком формате %ToJSON()? Приведите пример json с "u" и без.
...
Рейтинг: 0 / 0
Parsing JSONs
    #39338055
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsaВполне вменяемый вариант... Все работает нормальноВменяемый для кого: клиента или сервера?
Вряд ли javascript понимает встроенный внутренний формат Caché (native internal format), используемый по умолчанию.
...
Рейтинг: 0 / 0
Parsing JSONs
    #39338066
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servitВменяемый для кого: клиента или сервера?
Я привел пример JS-программы...
Все выводится в консоль браузера без проблем.
...
Рейтинг: 0 / 0
Parsing JSONs
    #39338083
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsaЯ привел пример JS-программы...
Все выводится в консоль браузера без проблем.Вы привели некорректный пример.
Данные Вы передаёте с клиента на клиент, а надо с сервера на клиент. Кроме того у Вас пароли уже экранированы, тогда как у ТС - нет.ВикипедияСтрока — это упорядоченное множество из нуля или более символов юникода, заключенное в двойные кавычки. Символы могут быть указаны с использованием escape-последовательностей, начинающихся с обратной косой черты «\» (поддерживаются варианты \", \\, \/, \t, \n, \r, \f и \b), или записаны шестнадцатеричным кодом в кодировке UTF-8 в виде \uFFFF proof .
...
Рейтинг: 0 / 0
Parsing JSONs
    #39338123
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servitВы привели некорректный пример.
Какой автор тут предоставил - такой я и дал.
Другого у меня нет.
...
Рейтинг: 0 / 0
Parsing JSONs
    #39338144
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsaservitВы привели некорректный пример.
Какой автор тут предоставил - такой я и дал.
Другого у меня нет.Автор предоставил JSON, который:
  • он формирует на сервере
  • JSON без экранирования и в этом как раз и заключается проблема автора
  • этот JSON клиент не понимает, потому что он неэкранирован
  • формируете его на клиенте
  • JSON Ваш внезапно уже экранирован
  • клиент его внезапно понимает.
  • ...
    Рейтинг: 0 / 0
    Parsing JSONs
        #39338499
    servit
    Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
    Участник
    Nadirbek Nurlybekov ,

    Если Вы используете try/catch и внутри вызываете метод, возвращающий %Status, а не исключение, то ошибка не перехватится.
    Код: plaintext
    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.
    Class tmp.test [ Abstract ]
    {
    
    ClassMethod MyError() As %Status [ Internal, Private ]
    {
      q $$$ERROR($$$NotImplemented)
    }
    
    ClassMethod Test(b As %Boolean = {$$$YES})
    {
      ;d ##class(tmp.test).Test()
      
      #dim ex As %Exception.AbstractException
      try{
        if b {
          s tSC=..MyError()
        } else {
          $$$ThrowOnError(..MyError())
        }
      }catch(ex) {
        w ex.DisplayString(),!
      }
    }
    }
    
    ------------------------------------
    
    USER>d ##class(tmp.test).Test()
     
    USER>d ##class(tmp.test).Test(0)
    ОШИБКА #5003: Не реализовано
    ...
    Рейтинг: 0 / 0
    Parsing JSONs
        #39338683
    Nadirbek Nurlybekov
    Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
    Гость
    servitПриведите пример json с "u" и без.А как это делать? Код %ToJSON() посмотрел. В его аргументах стоит вот что:

    Method %ToJSON(pLevel As %Integer = 0, pFormat As %String = "aelotw") As %Status [ Internal 

    , то есть "aelotw". А "u" здесь не предусмотрено.
    И try/catch я убрал. В терминале протестировал, но все выполнилось без ошибок. Проблема не в try/catch.

    krvsa,

    Password у меня крякозябрики, потому что это хэш-значения.

    Как мне перевести объекты в json-ы, понимающий javascript?
    ...
    Рейтинг: 0 / 0
    Parsing JSONs
        #39338743
    servit
    Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
    Участник
    Nadirbek NurlybekovА как это делать?
    А "u" здесь не предусмотрено.По умолчанию если не передавать параметры, используются соответственно 0 и "aelotw", но можно их задать с другими значениями (см. 17321595 ).
    Nadirbek NurlybekovИ try/catch я убрал. В терминале протестировал, но все выполнилось без ошибок. Проблема не в try/catch.Конечно изначальная проблема не в try/catch. Это был пример-совет на будущее.
    ...
    Рейтинг: 0 / 0
    Parsing JSONs
        #39339170
    servit
    Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
    Участник
    Nadirbek Nurlybekov ,

    Сделал тестовый пример клиента/сервера под REST.
    JSON формирую двумя способами: по-новому и через %ZEN.proxyObject.
    Код
    Код: plaintext
    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.
    59.
    60.
    61.
    62.
    63.
    64.
    65.
    66.
    67.
    68.
    69.
    Class tmp.rest Extends %CSP.REST
    {
    
    Parameter CHARSET = "UTF-8";
    
    Parameter CONTENTTYPE = {..#CONTENTTYPEJSON};
    
    Parameter CONVERTINPUTSTREAM = {$$$YES};
    
    XData UrlMap [ XMLNamespace = " http://www.intersystems.com/urlmap"  ]
    {
    <Routes>
      <Route Url="/rest/json/test1" Method="GET" Call="Test1"/>
      <Route Url="/rest/json/test2" Method="GET" Call="Test2"/>
      <Route Url="/" Method="GET" Call="MainPage"/>  
    </Routes>
    }
    
    ClassMethod Test1() As %Status
    {
      w {
        "Binary":("CachéHelloПривет"_$c(661)),
        "Password":("vØ\x02$aÉ¥ÕOùû¤F")
        }.%ToJSON()
      q $$$OK
    }
    
    ClassMethod Test2() As %Status
    {
      s obj=##class(%ZEN.proxyObject).%New()
      s obj.Binary="CachéHelloПривет"_$c(661)
      s obj.Password="vØ\x02$aÉ¥ÕOùû¤F"
      d obj.%ToJSON(,"aelos")
      
      q $$$OK
    }
    
    ClassMethod MainPage() As %Status
    {
      #dim %response As %CSP.Response
      s %response.ContentType="text/html"
      &html<<!DOCTYPE html>
    <html>
      <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
        <script type="text/javascript">
        function test()
        {
          var xhr = new XMLHttpRequest();
          xhr.open('GET','rest/json/test1',false); 
          xhr.send();
          var res1 = xhr.responseText, json1 = JSON.parse(res1);
          xhr.open('GET','rest/json/test2',false); 
          xhr.send();
          var res2 = xhr.responseText, json2 = JSON.parse(res2);
          alert(
          'res1=' + res1 + '\nres2=' + res2 +
          '\n\njson1.Password=' + json1.Password + '\njson2.Password=' + json2.Password +
          '\n\njson1.Binary=' + json1.Binary + '\njson2.Binary=' + json2.Binary
          );
        }
      </script>
      </head>
      <body><button onclick="test()">Получить JSON</button></body>
    </html>>
      q $$$OK
    }
    
    }
    На клиенте полученный JSON парсится без ошибок.
    ...
    Рейтинг: 0 / 0
    Parsing JSONs
        #39339857
    Nadirbek Nurlybekov
    Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
    Гость
    servit,
    Большое вам спасибо!!!
    ...
    Рейтинг: 0 / 0
    19 сообщений из 19, страница 1 из 1
    Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Parsing JSONs
    Целевая тема:
    Создать новую тему:
    Автор:
    Закрыть
    Цитировать
    Найденые пользователи ...
    Разблокировать пользователей ...
    Читали форум (0):
    Пользователи онлайн (0):
    x
    x
    Закрыть


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