Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

348
Views
JSON keys different when using console.log(object) and iterating over the object keys

I am having some trouble with a JSON object I receive from my server. Using console.log on the JSON object correctly shows the JSON object I sent from the server, but when I try to iterate over the keys it starts acting strange. See below.

> console.log(promotions);
{"promotion1":{"color":"white","backgroundColor":"red","text":"from promotion server"},"promotion2":{"color":"purple","backgroundColor":"yellow","text":"from promotion server2"},"promotion3":{"color":"green","backgroundColor":"black","text":"from promotion server3"}}

> for (p in promotions) { console.log(p); }
0
1
2
3
4
... (continues)
264
265
266
bold
strip
stripColors
trap
zalgo
zebra
rainbow
random
america
reset
dim
italic
underline
inverse
hidden
strikethrough
black
... (continues)
magentaBG
cyanBG
whiteBG

A few more details:

I am sending a request from a ExpressJS server using http.request to another ExpressJS server, which then returns the "promotion" JSON object. I have not been able to tell if it somehow gets corrupted underway (I might have set the encoding wrong?).

Testing using the same JSON object but hardcoded instead of sending it from the other server, gives the correct response.

Thanks!

about 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Your promotions value is the string representation of the JSON. So when you do your for loop, it iterates through it as a string.

var promotions = '{"promotion1":{"color":"white","backgroundColor":"red","text":"from promotion server"},"promotion2":{"color":"purple","backgroundColor":"yellow","text":"from promotion server2"},"promotion3":{"color":"green","backgroundColor":"black","text":"from promotion server3"}}';

for (var p in promotions) {
  console.log(p);
}

For why it does this, see this related question (although the truth is its just a weird consequence of the fact that strings are arrays behind the scenes in which case you should look at this answer)

If you do

var promotions = '{"promotion1":{"color":"white","backgroundColor":"red","text":"from promotion server"},"promotion2":{"color":"purple","backgroundColor":"yellow","text":"from promotion server2"},"promotion3":{"color":"green","backgroundColor":"black","text":"from promotion server3"}}';
  
// convert string representation of JSON into actual object
var promotionsObject = JSON.parse(promotions);

for (var p in promotionsObject) {
  console.log(p);
}

It should work as expected. Just keep in mind if you want to go through each object, and print the properties of those, you'll need to do extra work. See Printing nested JSON without using variable names

about 4 years ago · Santiago Trujillo Report

0

Try filtering out the properties that belongs to prototype

for (var p in promotions) {
  if (promotions.hasOwnProperty(p)) {
    console.log(p);
  }
}

about 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!