2009-04-17 4 views
3

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

есть код ниже, но на случай, если я использую 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> 

ответ

1

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

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

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

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

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

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

Working Example here. Вот код

<!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> 
3

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

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

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

Смежные вопросы