2016-03-30 4 views
1

Ich habe JSON String (siehe unten) und möchte es in ein Java-Objekt analysieren, das ist im Grunde kein Problem. Aber wie Sie sehen können, ist der Typ des Werts nicht fix. Gibt es eine Möglichkeit, dies in Objekte mit den Feldern zu zerlegenJSON-Wert in Java-Objekt

oder so ähnlich? Es ist mir wichtig, den Typ des Wertes so zu erhalten, dass ich die Daten in einer Datenbank persistieren kann.

[ 
    { 
     "key": "someKey", 
     "value": "SomeValue", 
     "time": "2016-03-30 14:59:55.108" 
    }, 
    { 
     "key": "otherKey", 
     "value": 42, 
     "time": "2016-03-30 14:59:55.108" 
    } 
] 
+0

Warum analysieren Sie Ihren Wert für "Wert" nicht als "Objekt"? – Mena

+0

meinst du ein Feld vom Typ Objekt? Wie Objektwert; – Anton

+0

Yep das ist was ich meine. – Mena

Antwort

2
String key; 
Object value; 
Timestamp time; 

Dann können Sie verwenden instanceof (ex. Wert instanceof String) den Typ zu identifizieren.

+0

Nun, ich dachte über diese Lösung nach, aber ich möchte diesen Wert in einer Postgres-Datenbank beibehalten. Und möchte nicht die Typinformation verlieren, die der JSON-Wert zu Beginn enthielt ... – Anton

+0

Uhm, wie ist das Feld in der Tabelle definiert? –

+0

Es ist noch nicht behoben, aber ich dachte über die Verwendung einer Spalte des Typs JSON – Anton

0

Warum nicht generischen Typ verwenden?

class JsonObj { 
    String key; E value; Timestamp time; 
} 

Und konkretes Objekt basierend auf Ihrem JSON erstellen.

0

Was Sie erreichen möchten, scheint mir ein Widerspruch zu grundlegenden JSON-Schema-Prinzipien oder Schema-Validierung im Allgemeinen zu sein.

Wenn Sie ein Schema definieren würden, das Ihre JSON-Dokumente darstellt, würden Sie wahrscheinlich aufgrund von Ambiguität des Typs, der der Eigenschaft "value" entspricht, nur eines erstellen.

Wenn Sie den "Typ" des Werts beibehalten möchten, würde ich vorschlagen, es in Ihr JSON-Dokument, z.

[ 
{ 
     "key": "someKey", 
     "value": "3.123", 
     "type": "number", 
     "time": "2016-03-30 14:59:55.108" 
}, 
{ 
     "key": "someKey", 
     "value": "someValue", 
     "type": "string", 
     "time": "2016-03-30 14:59:55.108" 
} 
] 

Das entsprechende JSON Schema wäre:

{ 
    "$schema": "http://json-schema.org/draft-04/schema#", 
    "description": "Some description", 
    "type" : "array", 
    "element" : { 
     "key" : { 
     "type" : "string" 
     }, 
     "value" : { 
     "type" : "string" 
     }, 
     "type" : { 
     "type" : "string" 
     },  
     "time" : { 
     "type" : "string" 
     } 
    }, 
    "required": ["key", "value", "type", "time"] 
} 

Hinweis Ihre Datenbankspalte muss auch mehrere Datentypen daher entsprechende Zeichenfolge Typ eines bestimmten Typs sein für die Speicherung ist wahrscheinlich die beste Passform.