2017-03-16 15 views
1

JSONのキーと値を2つのJSONファイル(英語とポルトガル語)からCSVに変換するJSONParserを作成しようとしています。JSON値内でエスケープ文字を解析する方法は?

ただし、CSVが生成されると、エスケープ文字は引き続きテキストに表示されます。私はOracleのJSONPを使用しています。どのようにエスケープ文字を解析できますか?他のライブラリを使用する必要がありますか?

キー: "validation.msg.calendar.repeating.cannot.be.blank":値(inPortuguese): "\" Repetindo \」pode SERの全角ブランコNAO。 "、

CSVファイルへの出力は、 \" Repetindo \ "にあります。 。

ライブラリー「のエスケープを解析されていない はありがとう

public class JSONParser { 
    private String DELIMITER=","; 
    private StringBuilder sb = new StringBuilder("Termo"+DELIMITER+"Inglês"+DELIMITER+"Português\r\n"); 
    private Writer wrt; 
    private JsonObject obj1, obj2; 
    private HashMap<String, String> hm1, hm2; 
    private Iterator<String> it1, it2; 

    public JSONParser(InputStream fis, InputStream fis2) { 
     obj1 = readJson(fis); 
     obj2 = readJson(fis2); 
     it1 = getIterator(obj1.keySet()); 
     it2 = getIterator(obj2.keySet()); 
     hm1 = createHashMap(obj1, it1); 
     hm2 = createHashMap(obj2, it2); 

    } 

    public HashMap<String, String> createHashMap(JsonObject obj, Iterator<String> it) { 
     HashMap<String, String> hm = new HashMap<String, String>(); 
     while (it.hasNext()) { 
      String key = it.next(); 
      hm.put(key, obj.get(key).toString()); 
     } 
     return hm; 

    } 

    public JsonObject readJson(InputStream fis) { 
     JsonReader reader = Json.createReader(fis); 
     JsonObject obj = reader.readObject(); 
     reader.close(); 
     return obj; 

    } 

    public Iterator<String> getIterator(Set<String> keys) { 
     Iterator<String> it = keys.iterator(); 
     return it; 
    } 

    public void generateCSV(String filename) throws IOException { 
     wrt = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(filename), "ISO-8859-1")); 
     Set<String> keys = obj1.keySet(); 
     Iterator<String> it = keys.iterator(); 

     while (it.hasNext()) { 
      String key = it.next(); 
      if(key.startsWith("#")) continue; 
      String pt = ""; 
      if (hm2.get(key) != null) 
       pt = hm2.get(key).toString(); 
      sb.append("\""+key+"\"" + DELIMITER + hm1.get(key).toString() + DELIMITER + pt +"\r\n"); 
     } 
     wrt.write(sb.toString()); 
     wrt.close(); 
    } 
} 
+0

何を話している "文字をエスケープ" を使用して得たことができますか?サンプルの入力と出力を表示できますか? – Hulk

+0

に例を追加しました! :) –

答えて

0

あなたの問題は、ここでは最も可能性が高いです!

hm1.get(key).toString() 

これは私たちが、話しているJsonValue.toStringある場合あなたの問題は、解析された値ではなくJSON文字列を返すようにオーバーライドされていることです。

JsonObjectのドキュメントはtをお勧めしますO上の例では2

を使用し、 "ジョン"

String firstName = object.getString("firstName");

+0

どうすれば解析された値を返すことができますか? JsonValue.returnValueのようなメソッドがありますか? –

+0

テキストを返す他の方法がわからないので、私はCSVにエクスポートできます。 –

+0

これを今テストすることはできませんが、JsonString.getStringを呼び出す必要があると思われます。 () ' – Hulk

関連する問題