私は非常に複雑な構造を持っています。json
です。それには多くのarray elements
が含まれ、それらの配列要素には他の配列要素などが含まれています。 以下を参照してくださいjson
ツリー構造。json配列全体の要素を検索して更新する方法json全体をトラバースせずに
JSONツリー構造-1:
JSONツリー構造-2:
黄色で上記強調表示され、I値を更新するように「rdKey
」フィールドの 私は、コードの下に書いて、それは完全に正常に動作している:
String json = "escaped string (as it's a big string, I can't put it here)";
JSONObject jsonObj = new JSONObject(json);
if (jsonObj.has("responseMap")) {
JSONObject responseMap = jsonObj.getJSONObject("responseMap");
if (responseMap.has("ValueJson")) {
JSONObject valueJson = responseMap.getJSONObject("ValueJson");
if (valueJson.has("ticketBean_CM")) {
JSONObject ticketBean_CM = valueJson.getJSONObject("ticketBean_CM");
if (ticketBean_CM.has("addByGamma")) {
String addByGamma = ticketBean_CM.getString("addByGamma");
System.out.println(addByGamma);
if (addByGamma.equals("VCE")) {
if (responseMap.has("ScreenJson")) {
JSONObject screenJson = responseMap.getJSONObject("ScreenJson");
if (screenJson.has("sections")) {
JSONArray sectionArray1 = screenJson.getJSONArray("sections");
if (sectionArray1.length() > 0) {
JSONObject section0 = sectionArray1.getJSONObject(0);
if (section0.has("sections")) {
JSONArray sectionArray2 = section0.getJSONArray("sections");
if (sectionArray2.length() > 3) {
JSONObject section6 = sectionArray2.getJSONObject(3);
if (section6.has("sections")) {
JSONArray sectionArray3 = section6.getJSONArray("sections");
if (sectionArray3.length() > 1) {
JSONObject section8 = sectionArray3.getJSONObject(1);
if (section8.has("elements")) {
JSONArray elementsArray1 = section8
.getJSONArray("elements");
if (elementsArray1.length() > 0) {
JSONObject elements1 = elementsArray1.getJSONObject(0);
if (elements1.has("elements")) {
JSONArray elementsArray2 = elements1
.getJSONArray("elements");
if (elementsArray2.length() > 4) {
JSONObject elements2 = elementsArray2
.getJSONObject(4);
if (elements2.has("rdKey")) {
System.out.println(
elements2.getString("rdKey"));
elements2.put("rdKey",
"CircuitID(FullPartial)");
System.out.println(
elements2.getString("rdKey"));
System.out.println(jsonObj.toString());
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
私はこのために任意のより良い解決策がある場合は君たちが私を助けたいです。 json
オブジェクト全体を走査することなく(私が関連するフィールドを見つけるまで)行うことはできますか? json
ツリー構造が変更された場合、このソリューションは動作しません。このコードの成功シナリオとしては静的である必要があります。
解決策をご提案ください。
コーディングスタイルがほぼ同じであるため、["responseMap"、 "ValueJson"、 "ticketBean_CM"、...、4]に 'for loop'を使用することができます –
私はそれを通過していません、 。 – Punit
構造内には配列の位置や列の名前など、多くの条件があるようです。それは後でそのようなものを必要としないか、またはこれらの配列を頻繁に通過する必要があるような特定の制約ですか?後者については、より簡単にアクセスできるようにオブジェクトを表すJava Beanを作成することをお勧めします。そうでなければ、 "要素長さの要素セクションなど"を繰り返さないように独自の小さなAPIを作成することができます。 – Asoub