BotMaster3000
BotMaster3000

Reputation: 482

Accessing a JSON integer element

I have an JSON-Object as follows:

Input for the months is customerSend,customerReceived,totalSendAllCustomers,totalReceivedAllCustomers

var emailObj = {
                "kundenNummer":17889,
                "jahre":
                {
                    2017:{
                        "Januar":[15,30,75,125],
                        "Februar":[17,32,77,127],
                        "März":[19,34,79,129],
                    },
                    2018:{
                        "Januar":[28,12,66,198],
                        "Oktober":[40,4,40,5],
                    }
                }
        }

How exactly do I access the specific year? I already tried it like this:

var keysYears = Object.keys(emailObj.jahre);
        var currentSelectedYear = keysYears[0];

        var keysMonth = Object.keys(emailObj.jahre[currentSelectedYear]);   
        var currentSelectedMonth = keysMonth[0];

        document.write(emailObj.jahre[currentSelectedYear].2017[0]);

I also tried some other ways of doing this but I already deleted those.

Can you tell me how to access the 2017 or 2018 data? I know that I could convert them into strings but I want to know if I could also do it this way.

Upvotes: 4

Views: 92

Answers (4)

GibboK
GibboK

Reputation: 73918

You cannot access with dot notation properties which contain as name a number in JavaScript. Instead you should consider using bracket notation.

Example:

emailObj.jahre['2017']

var emailObj = {
  "kundenNummer": 17889,
  "jahre": {
    2017: {
      "Januar": [15, 30, 75, 125],
      "Februar": [17, 32, 77, 127],
      "März": [19, 34, 79, 129],
    },
    2018: {
      "Januar": [28, 12, 66, 198],
      "Oktober": [40, 4, 40, 5],
    }
  }
};
console.log(emailObj['jahre']['2017']);
console.log(emailObj.jahre['2017']);

Upvotes: 0

surajck
surajck

Reputation: 1175

In a JavaScript object, the key is always a string, even if you use an integer it will be converted into a string.

obj = {
    key1: //contents
    key2: //contents
}

To access a specific key:

obj.key1
obj['key1']

For your example:

emailObj.jahre['2017']
emailObj['jahre']['2017']

Use the for in looping construct to loop through the keys of an object:

var emailObj = {
    "kundenNummer":17889,
    "jahre": {
        2017:{
            "Januar":[15,30,75,125],
            "Februar":[17,32,77,127],
            "März":[19,34,79,129],
        },
        2018:{
            "Januar":[28,12,66,198],
            "Oktober":[40,4,40,5],
        }
    }
}

for (key in emailObj.jahre) {
    console.log(emailObj.jahre[key]) //Here key will be '2017', '2018' etc
}

Upvotes: 0

Weedoze
Weedoze

Reputation: 13943

You can call the properties of your object emailObj by their names.

Either with a dot notation

emailObj.kundenNummer

Or by brackets notation

emailObj["kundenNummer"]

The dot notation won't work in your case because the name of your property is a number. You should then use

emailObj.jahre["2017"]

var emailObj = {
  "kundenNummer": 17889,
  "jahre": {
    "2017": {
      "Januar": [15, 30, 75, 125],
      "Februar": [17, 32, 77, 127],
      "März": [19, 34, 79, 129],
    },
    "2018": {
      "Januar": [28, 12, 66, 198],
      "Oktober": [40, 4, 40, 5],
    }
  }
};

let year = "2017";
let month = "Januar";

console.log(emailObj.jahre[year][month]);

Upvotes: 4

Mihai Alexandru-Ionut
Mihai Alexandru-Ionut

Reputation: 48357

You should use bracket notation.

document.write(emailObj.jahre[currentSelectedYear][currentSelectedMonth][0]);

var emailObj = {
                "kundenNummer":17889,
                "jahre":
                {
                    2017:{
                        "Januar":[15,30,75,125],
                        "Februar":[17,32,77,127],
                        "März":[19,34,79,129],
                    },
                    2018:{
                        "Januar":[28,12,66,198],
                        "Oktober":[40,4,40,5],
                    }
                }
        }
var keysYears = Object.keys(emailObj.jahre);
var currentSelectedYear = keysYears[0];
var keysMonth = Object.keys(emailObj.jahre[currentSelectedYear]);   
var currentSelectedMonth = keysMonth[0];
document.write(emailObj.jahre[currentSelectedYear][currentSelectedMonth][0]);

Upvotes: 1

Related Questions