2009-04-17 11 views
3

以下のJSON文字列を逆シリアル化するには、jQueryの各関数 を使用しますが、項目は未定義です。ASP.NET + jQuery、JSONをデシリアライズする方法は?

以下のコードがありますが、asp.net 2.0 + Webサービスを使用して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

あなたはASP.NETのSys.Serialization.JavaScriptSerializerのdeserializeメソッドを使用してみましたか?

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の変数のための$記号を使用する必要はありません。

関連する問題