首页 > 解决方案 > 无法将 JSON 转换为对象

问题描述

首先,我在互联网上搜索了我的问题的解决方案。我找到了几个可以解析我的 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

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}}"

我将创建一个新问题

标签: javascriptjsonxmlhttprequest

解决方案


这是有效的:

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

请记录/调试xhr.responseText并查看那里有什么。

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


推荐阅读