2017-06-15 35 views
0

私は、次のC#のメソッドを持っています。JSON文字列から配列を解析するには?

[HttpPost] 
public JsonResult GetDateBasedRegex(string date) 
{ 
    string[] arr = CommonMethods.GetDateBasedRegex(date); 

    JsonResult retVal = Json(JsonConvert.SerializeObject(retVal)); 

    return retVal; 
} 

arrには、次のものが含まれています

enter image description here

そして​​この値が含まれています

C#メソッドが呼び出されていることこのJSによって:

var date = $('#myDateField').val(); 

AjaxRequest(date, 'html', 'post', '/Common/GetDateBasedRegex', 'application/json;', function (response) 
{ 
    var result = JSON.parse(response); 
} 
); 

私はブレークポイントを設定し、responseresultの両方のための時計を追加しました:それは、引用符をエスケープするが、そうでない場合、彼らは同じ値だから

enter image description here

responseは少し長いです。

両方の変数は単一の文字列です。この値をどのように解析して配列にすることができますか? 最も関連性の高いものがJavascript how to parse JSON arrayと思われますが、選択された回答が示唆していることはすでに行っています。

私はJSフィドルを作成しようとしました:http://jsfiddle.net/zc2o6v52/しかし、引用符がデバッガによって追加されたため、それを動作させるために値を微調整する必要がありました。変数csharpJsonSerializedStringまたはresultを使用するとループは機能しますが、responseを使用すると、コンソールで「Uncaught SyntaxError:Unexpected string」エラーが発生します。

私は間違っていますか?どのようにJSON文字列から配列を解析しますか?

EDIT

C#retvalの値:

"[\"^[0-9]{9}[A-Z0-9]{0,3}$\",\"^[A-Z]{1,3}([0-9]{6}|[0-9]{9})$\"]"

response

JSの値:

""[\"^[0-9]{9}[A-Z0-9]{0,3}$\",\"^[A-Z]{1,3}([0-9]{6}|[0-9]{9})$\"]""

JS resultの値:

"["^[0-9]{9}[A-Z0-9]{0,3}$","^[A-Z]{1,3}([0-9]{6}|[0-9]{9})$"]"

これらをすべて右クリック - >値をコピーすることで取得します。したがって、それらは引用符の「ラッピング」セットを含むため、文字列にします。

C#は、JS配列をどのように定義するかのように形成されているようです。しかし、responseのような余分な引用符で囲まれているようだ?

また、私のJSを変更してvar result = ['',''];をajax呼び出しの外に定義してから、その値をJSON.parse()に更新しようとしましたが、その後も1つの文字列のままです。これはPOSTリクエスト

"[\"^[0-9]{9}[A-Z0-9]{0,3}$\",\"^[A-Z]{1,3}([0-9]{6}|[0-9]{9‌​})$\"]" 

これは何もJSONではありませんので、JSON.parseは働くことができない上、あなたのAPIが返す正確な値であると仮定すると、

+0

正確なjsonをテキストとして送信し、イメージとして送信することはできませんか?あなたのjsfiddle結果では、コンマで区切られた2つの文字列があり、文字列変数にそれを代入しようとします。 – petul

+0

@petul完了、申し訳ありません。 – sab669

+0

あなたのapiエンドポイントにヒットし、body-> raw値をコピーしますか?または、クロムネットワークのタブで生の応答のボディ?これまでのところ有効ではないようです。RFC 4627 JSON – petul

答えて

0

。あなたのJSONは次のようになります。

[ 
"^[0-9]{9}[A-Z0-9]{0,3}$", 
"^[A-Z]{1,3}([0-9]{6}|[0-9]{9‌​})$" 
] 

最良の方法は、正しい値(正しい方向にあなたを指している可能性がありますthis)を返すようにバックエンドを修正するだろう。そうしないと、あなたの結果変数に追加され始めと終わりに引用符を取り除く必要があります。

var result = "\"[\"^[0-9]{9}[A-Z0-9]{0,3}$\",\"^[A-Z]{1,3}([0-9]{6}|[0-9]{9‌​})$\"]\""; 
result = result.substring(1, result.length-1); 
var jsonData = JSON.parse(result); 
for (var i = 0; i < jsonData.length; i++) { 
    console.log(jsonData[i]); 
} 

問題が解決しない場合は、Ajaxの機能であなたの応答データがどのように異なるかをチェック上記の有効なjson

関連する問題