繁体   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