簡體   English   中英

如何從JSON字符串解析數組?

[英]How to parse an array from a JSON string?

我有以下C#方法:

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

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

    return retVal;
}

arr包含以下內容:

在此處輸入圖片說明

retVal.Data包含以下值:

在此處輸入圖片說明

該C#方法由此JS調用:

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

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

我設置了一個斷點,並為responseresult添加了一個監視:

在此處輸入圖片說明

response時間稍長一些,因為它轉義了引號,否則它們的值相同。

這兩個變量都是單個字符串。 如何將此值解析為數組? 鍵入此問題時,我查看了SO提出的各種“建議問題”,其中最相關的似乎是: Javascript如何解析JSON數組,但我已經在按照所選答案提出建議了。

我嘗試制作一個JS小提琴: http//jsfiddle.net/zc2o6v52/,但是由於調試器添加了引號,因此我不得不稍稍調整這些值才能使其正常工作。 如果我使用變量csharpJsonSerializedStringresult循環起作用,但是當我使用response時,我的控制台中出現“ Uncaught SyntaxError:Unexpected string”錯誤。

我究竟做錯了什么? 您如何從JSON字符串解析數組?

編輯

C# retval的值:

“[\\” ^ [0-9] {9} [A-Z0-9] {0,3} $ \\ “\\” ^ [AZ] {1,3}([0-9] {6} | [0-9] {9})$ \\ “]”

JS response的值:

“”[\\ “^ [0-9] {9} [A-Z0-9] {0,3} $ \\”,\\“^ [AZ] {1,3}([0-9] {6} | [0-9] {9})$ \\ “]””

JS result的值:

“[” ^ [0-9] {9} [A-Z0-9] {0,3} $ “” ^ [AZ] {1,3}([0-9] {6} | [O- 9] {9})$ “]”

通過右鍵單擊->復制值來獲取所有這些內容,因此它們包括“包裝”引號集使其成為字符串。

C#看起來像是正確定義了JS數組的形式。 似乎response中包裹着一組額外的引號嗎?

我還嘗試過更改JS以定義var result = ['','']; 在ajax調用之外,然后使用JSON.parse()更新其值,但此后仍保持為單個字符串。

假設這是您的API在POST請求中返回的確切值

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

這不是json,因此JSON.parse無法正常工作。 您的JSON應該如下所示:

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

最好的方法是修復后端以返回正確的值( 可能會為您指明正確的方向)。 否則,您需要刪除添加到結果變量中的引號和結尾的引號:

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有何不同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM