无法将JSON转换为对象

时间:2018-08-06 13:00:00

标签: javascript json xmlhttprequest

首先,我在互联网上搜索了针对我的问题的解决方案。 我发现了几个可以解析JSON并告诉我它有效的站点。我事先知道这一点,因为它起源于我的SQL Server。

但是当使用以下json调用JSON.parse(...)时,我得到的不是对象而是字符串!

到目前为止,我的代码:

function GetConfig(url) {
    var xhr = new XMLHttpRequest();
    xhr.open("GET", url, false);
    xhr.send(null);
    if (xhr.status === 200)
        return JSON.parse(xhr.responseText);
    else
        return null;
};
/*
  xhr.responseText returns this JSON:
    {"graphSettings":{"Caption":"TEST","Min":2.850000000000000e+001,"Max":2.950000000000000e+001}}

*/

    function GenerateHighChart(ressponse) {       
         var data = GetConfig('/api/Settings/Powerlog/Temperatures');

    }

但是当尝试将数据作为对象访问时,由于数据仍然是字符串,我会收到错误消息

var a = data.graphSettings.min;

更新

我相信问题出在我的API中

这是我的控制器:

[Produces("application/json")]
[Route("api/Settings")]
public class APIGetSettings : Controller
{
    private string InternalGetJson(string commandText, params object[] parameters)
    {
        var json = GetJson(commandText, parameters);
        return json.Replace("[", "").Replace("]", "");
    }
    private string GetSettingFromName(string name) => InternalGetJson("select * from fn_GetVisualSettings(@0) for json path", name);

    [Route("Powerlog/Temperatures")]
    public IActionResult Powerlog_Temperatures() => new JsonResult(GetSettingFromName("Powerlog/Temperatures"));

}


   /*
    JSON returned from GetSettingFromName

      {"graphSettings":{"Caption":"TEST","Min":2.850000000000000e+001,"Max":2.950000000000000e+001}}

    */
如果我将GetConfig更改为

,请在Javascript中

if (xhr.status === 200)
    return JSON.parse(xhr.responseJSON);
else
    return null;

responseJSON is undefined 

**更新**

我发现了错误。问题是我的API返回的文本

我明白了:

"{\"graphSettings\":{\"Caption\":\"TEST\",\"Min\":2.850000000000000e+001,\"Max\":2.950000000000000e+001}}"

但希望如此:

"{"graphSettings":{"Caption":"TEST","Min":2.850000000000000e+001,"Max":2.950000000000000e+001}}"

我将创建一个新的问题

1 个答案:

答案 0 :(得分:-2)

这有效:

var x = {"graphSettings":{"Caption":"TEST","Min":2.850000000000000e+001,"Max":2.950000000000000e+001}}
console.log(x.graphSettings.Min);

请登录/调试xhr.responseText,然后查看其中的内容。

如果有任何错误,请记住也将其发布在这里。