ASP.NET + jQuery, как десериализовать JSON? - PullRequest
3 голосов
/ 17 апреля 2009

Я хочу десериализовать строку JSON ниже, используя jQuery для каждой функции, но предмет не определен.

приведен код ниже, но, в случае, если я использую веб-сервис asp.net 2.0 +, заполняю DataTable и передаю классу System.Web.Script.Serialization.JavaScriptSerializer и возвращаю эту строку JSON.

    <html>
<head>
    <script type="text/javascript" src="js/jquery-1.3.2.js"></script>
       <script type="text/javascript"> 
  $(document).ready(function() {
  var $strJson = '[';
        $strJson +=  '{"Code":"a","Name":"Sam","Country":"US"},';
        $strJson +=  '{"Code":"b","Name":"John","Country":"CN"},';
        $strJson +=  '{"Code":"c","Name":"Mary","Country":"TW"}';
        $strJson +=  ']';
        $.each($strJson, function(key, item) {
         alert(item);
         if ( key == 0) return false; //Prevent infinity loop
         });
  });
</script> 
</head>
<body></body>
</html>

Ответы [ 2 ]

3 голосов
/ 17 апреля 2009

Просто используйте встроенный JavaScript-метод eval:

$.each(eval('(' + $strJson + ')'), function(key, item) {

Кстати, вам не нужно использовать знак $ для переменных в JavaScript.

1 голос
/ 17 апреля 2009

Вы пытались использовать метод ASP.NET Sys.Serialization.JavaScriptSerializer десериализация ?

var result = Sys.Serialization.JavaScriptSerializer.deserialize($strJson);

В качестве альтернативы есть json_parse

var result = json_parse($strJson, [reviver])

Этот метод анализирует текст JSON для создания объекта или массива. Может выдавать исключение SyntaxError.

Необязательный параметр reviver - это функция, которая может фильтровать и преобразовывать результаты. Он получает каждый из ключей и значений, и его возвращаемое значение используется вместо исходного значения. Если он возвращает то, что получил, то структура не модифицирована. Если он возвращает неопределенное значение, то член удаляется.

Рабочий пример здесь . Вот код

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script src="http://www.json.org/json_parse.js"></script>
<script type="text/javascript">
      $(function() {

            var $strJson =  '[';
            $strJson +=  '{"Code":"a","Name":"Sam","Country":"US"},';
            $strJson +=  '{"Code":"b","Name":"John","Country":"CN"},';
            $strJson +=  '{"Code":"c","Name":"Mary","Country":"TW"}';
            $strJson +=  ']';

            var result = json_parse($strJson);

            $.each(result, function(key, item) {
             alert("Code: " + item.Code + " ,Name: " + item.Name + " ,Country: " + item.Country);
             //Taken the following out as it prevents objects after the first from being "alerted"
             //if ( key == 0) return false; //Prevent infinity loop
             });
      });
</script>
<title>Sandbox</title>
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
</head>
<body>
    <p>Example Page</p>
</body>
</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...