JsonParser mit Regex


Status
Dieses Thema wurde gelöst! Zur Lösung gehen…

Sebastian29

Erfahrenes Mitglied
#1
Moin zusammen,

Beispiel als JSON-Text: {"Test 123 [Test 1]":{"dev_id":8, "dev_bez":"Test 1"},"Test 123 [Test 1]":{"dev_id":12, "dev_bez":"Test 2"}}

Nach dem Parsen erwarte ich folgende Ergebnisse:

Group 1: "dev_id":8, "dev_bez":"Test 1"
Group 2: "dev_id":12, "dev_bez":"Test 2"

oder das andere folgene Ergebnis:

Group 1: "Test 123 [Test 1]":{"dev_id":8, "dev_bez":"Test 1"}
Group 2: "Test 123 [Test 2]":{"dev_id":12, "dev_bez":"Test 2"}

Mein regulärer Ausdruck, was noch nicht ganz korrekt funktioiniert, lautet:
Code:
(?<!\{)(\:(\{.*\})(\,)?)(?!\})
Bei Fragen stehe ich gerne zur Verfügung.

Gruß
Sebastian29
 
Zuletzt bearbeitet:
#4
Ich habe noch nie mit JSON in Java gearbeitet. ABer Google gibt mir diverse Möglichkeiten.
Zum Beispiel mit org.json.simple.JSONObject.
JSON with Java

Ich würde auf etwas bestehendes zurückgreifen. Ich weiss wovon ich spreche. Da ich in VBA nix nach meinen wünschen gefunden hatte, habe ich mir selber ein Parser mittels RegEx gebaut. Es sind inzwischen 850 Zeilen Code und es gibt immer noch Fälle, wo es nicht funktioniert. [VBA] JSON [Yaslaw.Info]

Klar, VBA ist nicht mit Java vergleichbar. Aber grad da es in Java einfacher ist, externe Libraries hinzuzunehmen, sollte man so was für solche Fälle auch tun.
 

Bratkartoffel

gebratene Kartoffel
Premium-User
#5
Hi,

ich denke, dass du mit JsonPath gut fahren wirst:
json-path/JsonPath

Eingabe-JSON:
JSON:
{
   "Test 123 [Test 1]":{
      "dev_id":8,
      "dev_bez":"Test 1"
   },
   "Test 456 [Test 2]":{
      "dev_id":12,
      "dev_bez":"Test 2"
   }
}
Json-Path:
Code:
$.*
Ergebnis:
Code:
[
  {
    "dev_id": 8,
    "dev_bez": "Test 1"
  },
  {
    "dev_id": 12,
    "dev_bez": "Test 2"
  }
]
Oder mit dem JsonPath nur für die dev_id:
Code:
$.*.dev_id

Ergibt:  8,  12
Und analog für die dev_bez:
Code:
$.*.dev_bez

Ergibt:  "Test 1", "Test 2"
Grüsse,
BK
 
Zuletzt bearbeitet:

HonniCilest

Erfahrenes Mitglied
#7
Group 1: "Test 123 [Test 1]":{"dev_id":8, "dev_bez":"Test 1"}
Group 2: "Test 123 [Test 1]":{"dev_id":12, "dev_bez":"Test 2"}
Geht das überhaupt? Kann man 2 verschiedene Keys mit dem gleichen Bezeichner (Test 123 [Test 1]) haben? Ich bin der Überzeugung, dass alle Parser nur einen der Key-Value Paare finden oder gar eine Exception werfen würden. Im Falle von veschiedenen keys:

Java:
         String str =
            "{" +
                "\"key1\":{" +
                    "\"key1.1\":\"value1.1\"," +
                    "\"key1.2\":\"value1.2\"" +
                "}," +
                "\"key2\":{" +
                    "\"key2.1\":\"value2.1\"," +
                    "\"key2.2\":\"value2.2\"" +
                "}" +
            "}";
      
        JsonObject obj = Json.createReader(new StringReader(str)).readObject();
      
        obj.values().forEach(System.out::println);
Ausgabe:
Code:
{"key1.1":"value1.1","key1.2":"value1.2"}
{"key2.1":"value2.1","key2.2":"value2.2"}
dependencies:
Code:
<dependencies>
        <dependency>
            <groupId>javax.json</groupId>
            <artifactId>javax.json-api</artifactId>
            <version>1.1.4</version>
        </dependency>
        <dependency>
            <groupId>org.glassfish</groupId>
            <artifactId>javax.json</artifactId>
            <version>1.1.4</version>
        </dependency>
    </dependencies>
 

Sebastian29

Erfahrenes Mitglied
#8
Geht das überhaupt? Kann man 2 verschiedene Keys mit dem gleichen Bezeichner (Test 123 [Test 1]) haben?
Da gebe ich dir recht, es war nur ein Tippfehler. Es muss 2 versch. Keys mit dem unterschiedl. Bezeichner sein. In meinem Beitrag soweit korrigiert. Danke!

Wie Bratkatoffeln geschrieben hat, gefällt es mir am besten, da ich im riesigen JsonText nur ein Paar Felder brauche. Mit JsonPath erleichtert man soviel Arbeit.
 

Sebastian29

Erfahrenes Mitglied
#9
Hi,

ich denke, dass du mit JsonPath gut fahren wirst:
json-path/JsonPath

Eingabe-JSON:
JSON:
{
   "Test 123 [Test 1]":{
      "dev_id":8,
      "dev_bez":"Test 1"
   },
   "Test 456 [Test 2]":{
      "dev_id":12,
      "dev_bez":"Test 2"
   }
}
Json-Path:
Code:
$.*
Ergebnis:
Code:
[
  {
    "dev_id": 8,
    "dev_bez": "Test 1"
  },
  {
    "dev_id": 12,
    "dev_bez": "Test 2"
  }
]
Oder mit dem JsonPath nur für die dev_id:
Code:
$.*.dev_id

Ergibt:  8,  12
Und analog für die dev_bez:
Code:
$.*.dev_bez

Ergibt:  "Test 1", "Test 2"
Grüsse,
BK
Mit JsonPath ist einfach soo geil! Danke Bratkartoffel :D
 
Status
Dieses Thema wurde gelöst! Zur Lösung gehen…

Neue Beiträge