无法通过Object.property访问Javascript中的JSON元素

时间:2017-01-17 19:44:46

标签: javascript jquery json

我无法从JSON结构中访问简单的JSON元素,如下所示:

{
"ACTION": "AA",
"MESSAGE": "Customer: 30xxx Already Approved on 2017/01/01"
}

我以JSON格式获取数据,但是当我执行data.ACTION或data.MESSAGE时,我将Undefined作为输出。

通过区分大小写,它不起作用(附图像) enter image description here

var url = base + query;
var getJSON = function (url) {
    return new Promise(function (resolve, reject) {
        var xhr = new XMLHttpRequest();
        xhr.open('get', url, true);
        xhr.withCredentials = true;
        xhr.onload = function () {
            var status = xhr.status;
            if (status == 200) {
                resolve(xhr.response);
            } else {
                reject(status);
            }
        };
        xhr.send();
    });
};

getJSON(url).then(function (data) {
    console.log(data); //Getting JSON Data                   
    var output = JSON.stringify(data);
    var obj = JSON.parse(output.replace(/ 0+(?![\. }])/g, ' '));
    console.log(output);
    console.log(obj.message); //Here getting UNDEFINED                    

}, function (status) { //error detection....
    alert('Something went wrong.');
});

Console:
{"ACTION":"AA","MESSAGE":"Customer No. 0000030332 Already Approved On 20170113"}

stringify returns the following
{\"ACTION\":\"AA\",\"MESSAGE\":\"Customer No. 0000030332 Already Approved On 20170113\"}"

4 个答案:

答案 0 :(得分:1)

未定义

obj.message属性,当您尝试获取未在对象上定义的属性时,您将获得undefined

Javascript区分大小写。您应该尝试obj.MESSAGE来获取属性值。另外,要检查对象上是否存在属性,可以使用object.hasOwnProperty([propName])方法检查对象上是否存在属性。

编辑1 :尝试运行以下代码段。在访问属性之前解析JSON数据字符串。

var jsonString = "{\"ACTION\":\"AA\",\"MESSAGE\":\"Customer No. 0000030332 Already Approved On 20170113\"}";

var obj = JSON.parse(jsonString);
console.log(obj.MESSAGE);

答案 1 :(得分:1)

编辑。我首先想到的是错误是由于解析而造成的。 -.-

解决方案: 当您打印输出时,obj它仍然是一个字符串,而不是一个对象。所以那时候还可以。

您的“未定义”属性message应替换为MESSAGE。 而不是console.log(obj.message);只使用console.log(obj.MESSAGE);

另外。解析JSON的一个例子:

var myJson = '{"ACTION":"AA","MESSAGE":"Customer No. 0000030332 Already Approved On 20170113"}';
console.log(myJson);   // This prints the literal string  
console.log(JSON.parse(myJson)); // this prints an "object"

答案 2 :(得分:1)

data已经是一个JSON字符串,它不需要JSON.stringify它(它返回一个带有JSON编码的字符串文字的字符串)。将其解析为output只会再次导致字符串,该字符串没有属性。你应该使用

console.log(data);
var obj = JSON.parse(data);
console.log(obj);
obj.MESSAGE = obj.MESSAGE.replace(/ 0+(?![\. }])/g, ' ');

(注意属性名称的正确大小)

答案 3 :(得分:0)

您可以尝试:

sudo apt-get update

sudo apt-get install ruby-full

sudo gem install jekyll

jekyll -v