• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Json Object in Array finden

unique24

New member
Hallo,

ich habe ein JSON Object und benötige einige Werte draus.
Das JSOn als String:
Code:
{
  "values": [
    {
      "i": "nL7N1X66",
      "v": {
        "voltage1": {
          "#": 235.14
        }
      }
    },
    {
      "i": "nL7N1X66",
      "v": {
        "voltage2": {
          "#": 233.63
        }
      }
    },
    {
      "i": "nL7N1X66",
      "v": {
        "voltage3": {
          "#": 233.08
        }
      }
    },
    {
      "i": "nL7N1X66",
      "v": {
        "current1": {
          "#": 3.7398
        }
      }
    },
    {
      "i": "nL7N1X66",
      "v": {
        "current2": {
          "#": 3.7017
        }
      }
    },
    {
      "i": "nL7N1X66",
      "v": {
        "current3": {
          "#": 3.21
        }
      }
    },
    {
      "i": "nL7N1X66",
      "v": {
        "power1": {
          "#": -879.22
        }
      }
    },
    {
      "i": "nL7N1X66",
      "v": {
        "power2": {
          "#": -854.24
        }
      }
    },
    {
      "i": "nL7N1X66",
      "v": {
        "power3": {
          "#": -738.82
        }
      }
    },
    {
      "i": "nL7N1X66",
      "v": {
        "apparentpower1": {
          "#": 879.37
        }
      }
    },
    {
      "i": "nL7N1X66",
      "v": {
        "apparentpower2": {
          "#": 864.85
        }
      }
    },
    {
      "i": "nL7N1X66",
      "v": {
        "apparentpower3": {
          "#": 748.17
        }
      }
    },
    {
      "i": "nL7N1X66",
      "v": {
        "reactivepower1": {
          "#": 16.59
        }
      }
    },
    {
      "i": "nL7N1X66",
      "v": {
        "reactivepower2": {
          "#": -135.04
        }
      }
    },
    {
      "i": "nL7N1X66",
      "v": {
        "reactivepower3": {
          "#": -117.87
        }
      }
    },
    {
      "i": "nL7N1X66",
      "v": {
        "powerfactor1": {
          "#": 0.9998
        }
      }
    },
    {
      "i": "nL7N1X66",
      "v": {
        "powerfactor2": {
          "#": 0.9877
        }
      }
    },
    {
      "i": "nL7N1X66",
      "v": {
        "powerfactor3": {
          "#": 0.9875
        }
      }
    },
    {
      "i": "nL7N1X66",
      "v": {
        "angle1": {
          "#": 1.08
        }
      }
    },
    {
      "i": "nL7N1X66",
      "v": {
        "angle2": {
          "#": 8.98
        }
      }
    },
    {
      "i": "nL7N1X66",
      "v": {
        "angle3": {
          "#": 9.09
        }
      }
    },
    {
      "i": "nL7N1X66",
      "v": {
        "totalleistung": {
          "#": -2472.28
        }
      }
    },
    {
      "i": "nL7N1X66",
      "v": {
        "delivery": {
          "#": 2472.28
        }
      }
    },
    {
      "i": "nL7N1X66",
      "v": {
        "totalapparentpower": {
          "#": 2492.39
        }
      }
    },
    {
      "i": "nL7N1X66",
      "v": {
        "totalpowerfactor": {
          "#": 0.9917
        }
      }
    }
  ]
}

Nun benötige ich zuerst alle Werte, von "i" = "nL7N1X66"

Danach "current2", "current1", "current3" jweils den Wert "#"

Als Ergebnis:
current1 = 3.7398
current2 = 3.7017
current3 = 3.21

Die ID ... also "i" ist in diesem JSON komplett .. aber es können auch andere ID´s enthalten sein.
Daher zuerst alle "i" = "nL7N1X66" und dann die einzelnen Werte.

Danke!
 
Wo hast du denn dieses JSON her? Das ist ja extrem unpraktisch aufgebaut.

Zu deinem Problem:
Code:
var data = {
  "values": [
    {
      "i": "nL7N1X66",
      "v": {
        "voltage1": {
          "#": 235.14
        }
      }
    },
    {
      "i": "nL7N1X66",
      "v": {
        "voltage2": {
          "#": 233.63
        }
      }
    },
    {
      "i": "nL7N1X66",
      "v": {
        "voltage3": {
          "#": 233.08
        }
      }
    },
    {
      "i": "nL7N1X66",
      "v": {
        "current1": {
          "#": 3.7398
        }
      }
    },
    {
      "i": "nL7N1X66",
      "v": {
        "current2": {
          "#": 3.7017
        }
      }
    },
    {
      "i": "nL7N1X66",
      "v": {
        "current3": {
          "#": 3.21
        }
      }
    },
    {
      "i": "nL7N1X66",
      "v": {
        "power1": {
          "#": -879.22
        }
      }
    },
    {
      "i": "nL7N1X66",
      "v": {
        "power2": {
          "#": -854.24
        }
      }
    },
    {
      "i": "nL7N1X66",
      "v": {
        "power3": {
          "#": -738.82
        }
      }
    },
    {
      "i": "nL7N1X66",
      "v": {
        "apparentpower1": {
          "#": 879.37
        }
      }
    },
    {
      "i": "nL7N1X66",
      "v": {
        "apparentpower2": {
          "#": 864.85
        }
      }
    },
    {
      "i": "nL7N1X66",
      "v": {
        "apparentpower3": {
          "#": 748.17
        }
      }
    },
    {
      "i": "nL7N1X66",
      "v": {
        "reactivepower1": {
          "#": 16.59
        }
      }
    },
    {
      "i": "nL7N1X66",
      "v": {
        "reactivepower2": {
          "#": -135.04
        }
      }
    },
    {
      "i": "nL7N1X66",
      "v": {
        "reactivepower3": {
          "#": -117.87
        }
      }
    },
    {
      "i": "nL7N1X66",
      "v": {
        "powerfactor1": {
          "#": 0.9998
        }
      }
    },
    {
      "i": "nL7N1X66",
      "v": {
        "powerfactor2": {
          "#": 0.9877
        }
      }
    },
    {
      "i": "nL7N1X66",
      "v": {
        "powerfactor3": {
          "#": 0.9875
        }
      }
    },
    {
      "i": "nL7N1X66",
      "v": {
        "angle1": {
          "#": 1.08
        }
      }
    },
    {
      "i": "nL7N1X66",
      "v": {
        "angle2": {
          "#": 8.98
        }
      }
    },
    {
      "i": "nL7N1X66",
      "v": {
        "angle3": {
          "#": 9.09
        }
      }
    },
    {
      "i": "nL7N1X66",
      "v": {
        "totalleistung": {
          "#": -2472.28
        }
      }
    },
    {
      "i": "nL7N1X66",
      "v": {
        "delivery": {
          "#": 2472.28
        }
      }
    },
    {
      "i": "nL7N1X66",
      "v": {
        "totalapparentpower": {
          "#": 2492.39
        }
      }
    },
    {
      "i": "nL7N1X66",
      "v": {
        "totalpowerfactor": {
          "#": 0.9917
        }
      }
    }
  ]
}

var result = data.values.filter(function(set){
	return set.i === "nL7N1X66" && set.v && (set.v.current1 || set.v.current2 || set.v.current3);
}).map(function(set){
	return (set.v.current1 && {current1: set.v.current1["#"]}) ||
		(set.v.current2 && {current2: set.v.current2["#"]}) ||
		(set.v.current3 && {current3: set.v.current3["#"]});
});
console.log(result);

var betterJSON = {};
data.values.forEach(function(set){
	if (!betterJSON[set.i]){
		betterJSON[set.i] = {};
	}
	var data = betterJSON[set.i];
	if (set.v){
		Object.keys(set.v).forEach(function(key){
			if (!data[key]){
				if ((typeof set.v[key]["#"]) !== "undefined"){
					data[key] = set.v[key]["#"];
				}
				else {
					throw new Error("Unknown data structure.");
				}
			}
			else {
				throw new Error("Double data entry");
			}
		});
	}
	else {
		throw new Error("Unknown data structure.");
	}
});
console.log(JSON.stringify(betterJSON, null, "\t"));
 
Zurück
Oben