2017-06-15 25 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。