2017-01-05 49 views
0

我已經將DOM文檔轉換爲json字符串。但是,在列表只有一個值並且List有多個值的情況下,列表映射的方式存在一些問題。問題與解析json字符串與列表

對於前: 1)後的DOM文檔已經convered到JSON字符串,這裏AlphaStatus列表只用一個數值:

{ 
    "Gamma": { 
      . 
      . 
      . 
      . 
      "AlphaStatuses": { 
      "AlphaStatus": { 
        "AlphaHeaderKey": "201612221122273660", 
        "AlphaLineKey": "201612221122273661", 
       } 
      }, 
     "Delta": { 
      ... 
     } 
    } 
} 

2)DOM文檔後已convered到JSON字符串,這裏AlphaStatus名單隻包含多個值顯示爲:

{ 
    "Gamma": { 
      . 
      . 
      . 
      . 
      "AlphaStatuses": { 
      "AlphaStatus": [ 
       { 
        "AlphaHeaderKey": "201612221122273660", 
        "AlphaLineKey": "201612221122273661", 

       }, 
       { 
        "AlphaHeaderKey": "201612221122273660", 
        "AlphaLineKey": "201612221122273662", 

       }, 
       { 
        "AlphaHeaderKey": "201612221122273660", 
        "AlphaLineKey": "2016}2221122273663", 

       } 
      ] 
     }, 
     "Delta": { 
      ... 
     } 
    } 
} 

我使用下面傑克遜代碼到XML字符串轉換成JSON:

ObjectMapper mapper = new ObjectMapper(); 
mapper.enable(SerializationFeature.INDENT_OUTPUT); 
Object json = mapper.readValue(jObject.toString(), Object.class); 
String output = mapper.writeValueAsString(json); 

我的問題是,我如何確保AlphaStatus List始終以[{和以}結尾]開頭,無論它是否只有一個值或多個值。這怎麼能解決。 它導致其他系統中的問題,它假定AlphaStatus始終是一個List,並且期望[{成爲令牌的一部分。

任何幫助表示讚賞。或者我應該在這種情況下使用一些字符串實用程序來解析AlphaStatus並用[{和}]替換。如何才能做到這一點

+0

你說,這些都是從同一個XML片段產生或來自不同的xml片段。無論哪種方式,你可以包括XML。 – mikea

回答

0

首先,它似乎行

Object json = mapper.readValue(jObject.toString(), Object.class);

是沒用的,因爲你已經有一個對象(jObject)連載。

只是用它:

String output = mapper.writeValueAsString(jObject);

對於第二,看來你的問題的字段是java.lang.Object類型的,對不對?

如果您爲分配一個值,它會導致一個單一的JSON對象:

jObject.setAlphaStatuses(alphaStatus); - >結果 - >{...}

如果你是分配一些類型的集合,它會導致在一個JSON數組:

jObject.setAlphaStatuses(Arrays.asList(alphaStatus1, alphaStatus2)); - >結果 - >[{...},{...}]

爲了避免這種情況,要麼始終傳遞一個列表或者(如果你可以改變CLA的定義ss)使它成爲一個集合(也許一些列表)。

這裏一個小片段進行測試:

import java.util.Arrays; 

import com.fasterxml.jackson.core.JsonProcessingException; 
import com.fasterxml.jackson.databind.ObjectMapper; 

public class JsonObjects { 

    private final static ObjectMapper mapper = new ObjectMapper(); 

    private final static AlphaStatus as1 = new AlphaStatus(); 
    private final static AlphaStatus as2 = new AlphaStatus(); 

    static { 
     as1.setAlphaHeaderKey("A"); 
     as1.setAlphaLineKey("B"); 

     as2.setAlphaHeaderKey("C"); 
     as2.setAlphaLineKey("D"); 
    } 

    public static void main(String[] args) throws JsonProcessingException { 

     final Gamma gamma = new Gamma(); 

     gamma.setAlphaStatuses(Arrays.asList(as1, as2)); 

     System.out.println(mapper.writeValueAsString(gamma)); 

     gamma.setAlphaStatuses(as1); 

     System.out.println(mapper.writeValueAsString(gamma)); 

    } 

    static class Gamma { 

     Object alphaStatuses; 

     public Object getAlphaStatuses() { 
      return alphaStatuses; 
     } 

     public void setAlphaStatuses(Object alphaStatuses) { 
      this.alphaStatuses = alphaStatuses; 
     } 
    } 

    static class AlphaStatus { 

     String alphaHeaderKey; 
     String alphaLineKey; 

     public String getAlphaHeaderKey() { 
      return alphaHeaderKey; 
     } 

     public void setAlphaHeaderKey(String alphaHeaderKey) { 
      this.alphaHeaderKey = alphaHeaderKey; 
     } 

     public String getAlphaLineKey() { 
      return alphaLineKey; 
     } 

     public void setAlphaLineKey(String alphaLineKey) { 
      this.alphaLineKey = alphaLineKey; 
     } 
    } 
} 

而結果(不完全是你的結果,僅用於演示):

{"alphaStatuses":[{"alphaHeaderKey":"A","alphaLineKey":"B"},{"alphaHeaderKey":"C","alphaLineKey":"D"}]} 
{"alphaStatuses":{"alphaHeaderKey":"A","alphaLineKey":"B"}} 
0
@JsonRootName("Gamma") 
public class Gamma { 

    private AlphaStatuses AlphaStatuses; 

// getters and setters 
} 
public class AlphaStatuses { 

    @JsonProperty("alphaStatus") 
    private List<AlphaStatus> alphaStatuses; 

// getters and setters 
} 


public class AlphaStatus{ 

    @JsonProperty("alphaHeaderKey") 
    private String alphaHeaderKey; 

    @JsonProperty("alphaLineKey") 
    private String alphaLineKey; 


// getters and setters 
} 

**Test class**: 


     @Test 
     public void test() throws Exception { 

      Gamma gamma=new Gamma(); 
      gamma.setAlphaStatuses(new AlphaStatuses(Arrays.asList(new AlphaStatus("201612221122273660","201612221122273660")))); 
      ObjectMapper mapper=new ObjectMapper(); 
      mapper.configure(SerializationFeature.WRAP_ROOT_VALUE,true); 
      String jsonString=mapper.writeValueAsString(gamma); 
      System.out.println("output "+jsonString); 
     } 

**Output**: 

output {"Gamma":{"alphaStatues":{"alphaStatus":[{"alphaHeaderKey":"201612221122273660","alphaLineKey":"201612221122273660"}]}}} 
+0

感謝Barath&Kevin。實際上,當我將其更改爲List時,它確實解決了問題。 – gautham

+0

@gautham如果帖子幫了你。請重新投票,因爲這很重要。 – Barath