[英]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);
}
);
我設置了一個斷點,並為response
和result
添加了一個監視:
response
時間稍長一些,因為它轉義了引號,否則它們的值相同。
這兩個變量都是單個字符串。 如何將此值解析為數組? 鍵入此問題時,我查看了SO提出的各種“建議問題”,其中最相關的似乎是: Javascript如何解析JSON數組,但我已經在按照所選答案提出建議了。
我嘗試制作一個JS小提琴: http : //jsfiddle.net/zc2o6v52/,但是由於調試器添加了引號,因此我不得不稍稍調整這些值才能使其正常工作。 如果我使用變量csharpJsonSerializedString
或result
循環起作用,但是當我使用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.