2017-06-15 27 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/但由於調試器添加了引號,我不得不稍微調整一下這些值以使其正常工作。如果我使用變量csharpJsonSerializedStringresult該循環有效,但是當我使用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})$\"]"

JS response的值:

""[\"^[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()更新它的值,但它仍然是一個單一的字符串後。

+0

你可以發佈確切的json你發送文本而不是圖像?在你的jsfiddle結果是兩個字符串用逗號分隔,並且你試圖將它分配給一個字符串變量 – petul

+0

@petul完成,抱歉。 – sab669

+0

您可以使用郵遞員,並打你的API端點,並複製身體 - >原始值?或在鉻網絡選項卡的原始響應正文?到目前爲止,它似乎不是有效的RFC 4627 JSON – petul

回答

0

假設這是確切數值上POST請求

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

這是你API返回沒有JSON,所以JSON.parse不能工作。您的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。