Java Object to Hashmap ?

fredi

Mitglied
Hallo zusammen,

ich hab ein Problem und auch nach längeren ausprobieren + googlen konnte ich keine Lösung finden. Vielleicht könnt ihr mir eine Hilfestellung geben.

Ich hab einen Map<String, Object>. Das hier bekomme ich zurück wenn ich den Value abfrage (abgekürzt ....)

{"fieldValues":[{"fieldId":0,"fieldName":"ID","encodedValue":"1958","tableRows":null,"computed":false},{"fieldId":76,"fieldName":"Parent","encodedValue":null, .......]}

Ich würde gerne jetzt gerne irgendwie den wert 1958 bekommen. Wie mach ich das am besten?

Danke vorab für die Unterstützung

VG
 
Der Zugriff auf eine Map erfolgt über die Methode get. In der Map kann offensichtlich eine weitere Map oder Liste enthalten sein. Dann muss man den Rückgabewert entsprechend casten.
Java:
Map<String, Object> map = ...
Object o = map.get("encodedValue");
System.out.println(o);

Es sieht aber so aus, als würdest du JSON einlesen wollen. Das macht man normalerweise mit einer Bibliothek, z.B.:
https://mkyong.com/java/jackson-how-to-parse-json/
 
Zuletzt bearbeitet:
Hi Oneixee5
Der Zugriff auf eine Map erfolgt über die Methode get. In der Map kann offensichtlich eine weitere Map oder Liste enthalten sein. Dann muss man den Rückgabewert entsprechend casten.
Java:
Map<String, Object> map = ...
Object o = map.get("encodedValue");
System.out.println(o);

Es sieht aber so aus, als würdest du JSON einlesen wollen. Das macht man normalerweise mit einer Bibliothek, z.B.:
https://mkyong.com/java/jackson-how-to-parse-json/
Danke für deine Antwort. So was hatte ich schon probiert bekomme aber eine Fehlermeldung, da der erste Wert auch wieder ein Key ist 🙁 "fieldvalues" und kein JsonObject oder JsonArray.
 
Also erst einmal ganz deutlich: Du solltest auch meiner Meinung nach genau anschauen, wie man normalerweise mit JSON umgehen würde.

Aber schauen wir uns das JSON einfach einmal im Detail an:
JSON:
{
    "fieldValues":[
        {"fieldId":0,"fieldName":"ID","encodedValue":"1958","tableRows":null,"computed":false},
        {"fieldId":76,"fieldName":"Parent","encodedValue":null, .......
    ]
}

Du hast also ein JSON Objekt (die äußeren { } ). Dieses Objekt hat ein Attribut mit dem Namen fieldValues und als Wert hat dies ein Array ( das siehst Du an den [ ] ).

In dem Array hast Du dann wieder Objekte. Und diese haben die Eigenschaften fieldId, fieldName, tableRows und computed.

Das kann noch weiter vertieft sein - so haben wir kein Beispiel, was in tableRows stehen würde. Da könnte also auch ein komplexes Objekt gespeichert sein.

Diese Struktur kannst Du dann aber auch ganz manuell mit JsonObject / JsonArray / ... Klassen durchgehen, wenn Du dies unbedingt wolltest.

Das Vorgehen wäre einfach:
  • Erstell die Klassen, die dies abbilden.
  • Nutz eine der Libraries aus den gegebenen Links um das JSON einzulesen und eben Instanzen von der erstellten Klasse zu haben.

Mit gson würde sowas so in der Art aussehen (Jetzt einfach einmal als UnitTest geschrieben und mit inneren Klassen und ich habe natürlich den json Text etwas angepasst um ein gültiges json zu haben:

Java:
package de.kneitzel;

import com.google.gson.Gson;
import com.google.gson.annotations.SerializedName;
import lombok.Getter;
import lombok.Setter;
import org.junit.jupiter.api.Test;

import java.util.List;

public class JsonTest {

    @Getter
    @Setter
    public static class Container {
        @SerializedName("fieldValues")
        private List<FieldValue> fieldValues;
    }

    @Getter
    @Setter
    public static class FieldValue {
        @SerializedName("fieldId")
        private int fieldId;

        @SerializedName("fieldName")
        private String fieldName;

        @SerializedName("encodedValue")
        private String encodedValue;

        @SerializedName("tableRows")
        private Object tableRows; // null, könnte je nach Bedarf angepasst werden

        @SerializedName("computed")
        private boolean computed;
    }

    @Test
    public void testUnmarshal() {
        String jsonText = "{\"fieldValues\":[{\"fieldId\":0,\"fieldName\":\"ID\",\"encodedValue\":\"1958\",\"tableRows\":null,\"computed\":false},{\"fieldId\":76,\"fieldName\":\"Parent\",\"encodedValue\":null,\"tableRows\":null,\"computed\":false}]}";
        Gson gson = new Gson();
        Container container = gson.fromJson(jsonText, Container.class);

        System.out.println("Parsed JSON:");
        for (FieldValue fieldValue : container.getFieldValues()) {
            System.out.println("Field Name: " + fieldValue.getFieldName() + ", Encoded Value: " + fieldValue.getEncodedValue());
        }
    }
}

Aber schau Dir einfach die Links an - da findest Du deutlich mehr an Erläuterungen.
 
Also erst einmal ganz deutlich: Du solltest auch meiner Meinung nach genau anschauen, wie man normalerweise mit JSON umgehen würde.

Aber schauen wir uns das JSON einfach einmal im Detail an:
JSON:
{
    "fieldValues":[
        {"fieldId":0,"fieldName":"ID","encodedValue":"1958","tableRows":null,"computed":false},
        {"fieldId":76,"fieldName":"Parent","encodedValue":null, .......
    ]
}

Du hast also ein JSON Objekt (die äußeren { } ). Dieses Objekt hat ein Attribut mit dem Namen fieldValues und als Wert hat dies ein Array ( das siehst Du an den [ ] ).

In dem Array hast Du dann wieder Objekte. Und diese haben die Eigenschaften fieldId, fieldName, tableRows und computed.

Das kann noch weiter vertieft sein - so haben wir kein Beispiel, was in tableRows stehen würde. Da könnte also auch ein komplexes Objekt gespeichert sein.

Diese Struktur kannst Du dann aber auch ganz manuell mit JsonObject / JsonArray / ... Klassen durchgehen, wenn Du dies unbedingt wolltest.

Das Vorgehen wäre einfach:
  • Erstell die Klassen, die dies abbilden.
  • Nutz eine der Libraries aus den gegebenen Links um das JSON einzulesen und eben Instanzen von der erstellten Klasse zu haben.

Mit gson würde sowas so in der Art aussehen (Jetzt einfach einmal als UnitTest geschrieben und mit inneren Klassen und ich habe natürlich den json Text etwas angepasst um ein gültiges json zu haben:

Java:
package de.kneitzel;

import com.google.gson.Gson;
import com.google.gson.annotations.SerializedName;
import lombok.Getter;
import lombok.Setter;
import org.junit.jupiter.api.Test;

import java.util.List;

public class JsonTest {

    @Getter
    @Setter
    public static class Container {
        @SerializedName("fieldValues")
        private List<FieldValue> fieldValues;
    }

    @Getter
    @Setter
    public static class FieldValue {
        @SerializedName("fieldId")
        private int fieldId;

        @SerializedName("fieldName")
        private String fieldName;

        @SerializedName("encodedValue")
        private String encodedValue;

        @SerializedName("tableRows")
        private Object tableRows; // null, könnte je nach Bedarf angepasst werden

        @SerializedName("computed")
        private boolean computed;
    }

    @Test
    public void testUnmarshal() {
        String jsonText = "{\"fieldValues\":[{\"fieldId\":0,\"fieldName\":\"ID\",\"encodedValue\":\"1958\",\"tableRows\":null,\"computed\":false},{\"fieldId\":76,\"fieldName\":\"Parent\",\"encodedValue\":null,\"tableRows\":null,\"computed\":false}]}";
        Gson gson = new Gson();
        Container container = gson.fromJson(jsonText, Container.class);

        System.out.println("Parsed JSON:");
        for (FieldValue fieldValue : container.getFieldValues()) {
            System.out.println("Field Name: " + fieldValue.getFieldName() + ", Encoded Value: " + fieldValue.getEncodedValue());
        }
    }
}

Aber schau Dir einfach die Links an - da findest Du deutlich mehr an Erläuterungen.
Super danke dir ich schau es mir gleich an 🙂
 
Also erst einmal ganz deutlich: Du solltest auch meiner Meinung nach genau anschauen, wie man normalerweise mit JSON umgehen würde.

Aber schauen wir uns das JSON einfach einmal im Detail an:
JSON:
{
    "fieldValues":[
        {"fieldId":0,"fieldName":"ID","encodedValue":"1958","tableRows":null,"computed":false},
        {"fieldId":76,"fieldName":"Parent","encodedValue":null, .......
    ]
}

Du hast also ein JSON Objekt (die äußeren { } ). Dieses Objekt hat ein Attribut mit dem Namen fieldValues und als Wert hat dies ein Array ( das siehst Du an den [ ] ).

In dem Array hast Du dann wieder Objekte. Und diese haben die Eigenschaften fieldId, fieldName, tableRows und computed.

Das kann noch weiter vertieft sein - so haben wir kein Beispiel, was in tableRows stehen würde. Da könnte also auch ein komplexes Objekt gespeichert sein.

Diese Struktur kannst Du dann aber auch ganz manuell mit JsonObject / JsonArray / ... Klassen durchgehen, wenn Du dies unbedingt wolltest.

Das Vorgehen wäre einfach:
  • Erstell die Klassen, die dies abbilden.
  • Nutz eine der Libraries aus den gegebenen Links um das JSON einzulesen und eben Instanzen von der erstellten Klasse zu haben.

Mit gson würde sowas so in der Art aussehen (Jetzt einfach einmal als UnitTest geschrieben und mit inneren Klassen und ich habe natürlich den json Text etwas angepasst um ein gültiges json zu haben:

Java:
package de.kneitzel;

import com.google.gson.Gson;
import com.google.gson.annotations.SerializedName;
import lombok.Getter;
import lombok.Setter;
import org.junit.jupiter.api.Test;

import java.util.List;

public class JsonTest {

    @Getter
    @Setter
    public static class Container {
        @SerializedName("fieldValues")
        private List<FieldValue> fieldValues;
    }

    @Getter
    @Setter
    public static class FieldValue {
        @SerializedName("fieldId")
        private int fieldId;

        @SerializedName("fieldName")
        private String fieldName;

        @SerializedName("encodedValue")
        private String encodedValue;

        @SerializedName("tableRows")
        private Object tableRows; // null, könnte je nach Bedarf angepasst werden

        @SerializedName("computed")
        private boolean computed;
    }

    @Test
    public void testUnmarshal() {
        String jsonText = "{\"fieldValues\":[{\"fieldId\":0,\"fieldName\":\"ID\",\"encodedValue\":\"1958\",\"tableRows\":null,\"computed\":false},{\"fieldId\":76,\"fieldName\":\"Parent\",\"encodedValue\":null,\"tableRows\":null,\"computed\":false}]}";
        Gson gson = new Gson();
        Container container = gson.fromJson(jsonText, Container.class);

        System.out.println("Parsed JSON:");
        for (FieldValue fieldValue : container.getFieldValues()) {
            System.out.println("Field Name: " + fieldValue.getFieldName() + ", Encoded Value: " + fieldValue.getEncodedValue());
        }
    }
}

Aber schau Dir einfach die Links an - da findest Du deutlich mehr an Erläuterungen.
Funktioniert danke
 

Neue Themen


Zurück
Oben