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