[英]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.