2017-01-26 2 views
1

Ich habe ein benutzerdefiniertes Reststeuerelement in Java geschrieben. Alles funktioniert gut für String-Felder, aber nicht für mehrwertige String-Felder. Mein Code gibtAbrufen von JSON aus einem Feld mit mehreren Werten in der benutzerdefinierten Java-Ruhezustandskontrolle

"[Wert1, Wert2, Wert3 ...]" zurück. Beachten Sie, dass es keine Kommas um die Werte gibt. Auf der Webseite sieht die Ausgabe wie folgt aus:

enter image description here

Wenn ich Kommas um die Werte, die Front-End-Rahmen leicht analysieren kann bekommen.

Ich habe versucht, den Wert aus dem Feld zu analysieren und richtig formatiert, aber es scheint nicht richtig zu sein.

Der erste Satz Code funktioniert für eine Zeichenfolge. Der zweite ist ein Versuch, für ein mehrwertiges Feld zu arbeiten.

Jede Hilfe würde sehr geschätzt werden.

writer.startProperty("chgTitle"); 
     writer.outStringLiteral(String.valueOf(columnValues.get(0))); 
writer.endProperty(); 

writer.startProperty("plpAffected");  
       Object tmpObj = columnValues.get(5); 
       if (tmpObj instanceof Vector) { 
         String[] copyArr = new String[((Vector) tmpObj).size()]; 
         ((Vector) tmpObj).copyInto(copyArr); 
         writer.outStringLiteral(String.valueOf(copyArr)); 
       } else { 
       } 
writer.endProperty(); 

Antwort

2

Ich würde einen etwas anderen Ansatz empfehlen. Ich möchte meine JSON-Strukturen zwingen, ein Array überall dort zu verwenden, wo eine Situation mit mehreren Werten möglich ist. Es sieht auch so aus, als ob du Philippe Riand's specialized JSON writer verwendest, also nehme ich das an.

Hier ist, wie ich es angreifen würde:

writer.startProperty("chgTitle"); 
     writer.outStringLiteral(String.valueOf(columnValues.get(0))); 
writer.endProperty(); 

writer.startProperty("plpAffected");  
    Vector<?> tmpVec = Util.getValueAsVector(columnValues.get(5)); 
    writer.startArray(); 
    for (Object ob : tmpVec) { 
     writer.startArrayItem(); 
      // assuming String contents 
      writer.outStringLiteral(String.valueOf(ob)); 
     writer.endArrayItem(); 
    } 
    writer.endArray(); 
writer.endProperty(); 

die Rückkehr columnValues zu wickeln, ich bin a Java equivalent von my SSJS getValueAsVector helper function verwenden. Es prüft auf Vector oder ArrayList, die ich fast ausschließlich benutze; Wenn nicht, schiebt es es in eine neue Vector. Hier ist, wie diese Methode aussieht,

public static Vector<?> getValueAsVector(Object obj) { 
    if(obj instanceof java.util.Vector){ 
    return (Vector<?>) obj; 
    }else if(obj instanceof ArrayList) { 
    List<?> o = (List<?>) obj; 
    Vector<Object> tmpVec = new Vector<Object>(); 
    for(int i=0;i<o.size();i++){ 
     tmpVec.add(o.get(i)); 
    } 
    return tmpVec; 
    }else { 
    Vector<Object> tmpVec = new Vector<Object>(); 
    tmpVec.add(obj); 
    return tmpVec; 
    } 
} 
+1

Dies funktionierte perfekt. –

+2

Eine kleine Änderung: anstelle von "(String) obj" benutze "String.valueOf (obj)" - es wird für alle Datentypen funktionieren und nicht explodieren, falls obj null sein könnte. – stwissel

Verwandte Themen