私はWebサービスを.netで持っています。データベースからデータを取得すると、Android MobileでJSONファイルが返されます。 JSONファイルをXMLまたはテキストに変換するにはどうすればよいですか。JsonをXmlに変換する最も簡単な方法
答えて
JSONをXMLに変換するためのアンドロイドの直接変換APIはありません。まずJSONを解析する必要があります。次に、JSONをxmlに変換するロジックを記述する必要があります。
シンプルな解決策として、簡単なコード行を使用して任意の複雑なJSONをXMLに変換できるので、Jacksonをお勧めします。
import org.codehaus.jackson.map.ObjectMapper;
import com.fasterxml.jackson.xml.XmlMapper;
public class Foo
{
public String name;
public Bar bar;
public static void main(String[] args) throws Exception
{
// JSON input: {"name":"FOO","bar":{"id":42}}
String jsonInput = "{\"name\":\"FOO\",\"bar\":{\"id\":42}}";
ObjectMapper jsonMapper = new ObjectMapper();
Foo foo = jsonMapper.readValue(jsonInput, Foo.class);
XmlMapper xmlMapper = new XmlMapper();
System.out.println(xmlMapper.writeValueAsString(foo));
// <Foo xmlns=""><name>FOO</name><bar><id>42</id></bar></Foo>
}
}
class Bar
{
public int id;
}
このデモはJackson 1.7.7を使用しています(新しい1.7.8でも動作するはずです)、Jackson XML Databind 0.5.3(ジャクソン1.8とまだ互換性がありません)、およびStax2 3.1.1。
'Foo'やクラスが必要ない/しない場合はどうすればいいですか?一般的な方法はありますか? –
標準org.json.XML JSONとXMLを両方向で変換します。
変換は、XML属性をまったく作成しない(エンティティのみ)ため、XML出力は可能な場合よりも大きくなります。しかし、変換が必要なデータ構造に一致するJavaクラスを定義する必要はありません。
無効なXMLが生成されます。 –
ここでは、有効なXMLを生成してこれを行う方法の例を示します。また、MavenプロジェクトでJacksonライブラリを使用しています。
Mavenのセットアップ:
<!-- https://mvnrepository.com/artifact/com.fasterxml/jackson-xml-databind -->
<dependency>
<groupId>com.fasterxml</groupId>
<artifactId>jackson-xml-databind</artifactId>
<version>0.6.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.8.6</version>
</dependency>
ここでは、最初のオブジェクトにJSON文字列を変換し、XMLにXMLMapperを持つオブジェクトに変換しても、間違った要素名を削除するいくつかのJavaコードです。 XML要素名に間違った文字を置き換える理由は、$ oidのようなJSON要素名にXMLで許可されていない文字を使用できるという事実です。 Jacksonのライブラリはそれを考慮していないので、要素名と名前空間宣言から不正な文字を削除するコードを追加してしまいました。ここで
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.xml.XmlMapper;
import java.io.IOException;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* Converts JSON to XML and makes sure the resulting XML
* does not have invalid element names.
*/
public class JsonToXMLConverter {
private static final Pattern XML_TAG =
Pattern.compile("(?m)(?s)(?i)(?<first><(/)?)(?<nonXml>.+?)(?<last>(/)?>)");
private static final Pattern REMOVE_ILLEGAL_CHARS =
Pattern.compile("(i?)([^\\s=\"'a-zA-Z0-9._-])|(xmlns=\"[^\"]*\")");
private ObjectMapper mapper = new ObjectMapper();
private XmlMapper xmlMapper = new XmlMapper();
String convertToXml(Object obj) throws IOException {
final String s = xmlMapper.writeValueAsString(obj);
return removeIllegalXmlChars(s);
}
private String removeIllegalXmlChars(String s) {
final Matcher matcher = XML_TAG.matcher(s);
StringBuffer sb = new StringBuffer();
while(matcher.find()) {
String elementName = REMOVE_ILLEGAL_CHARS.matcher(matcher.group("nonXml"))
.replaceAll("").trim();
matcher.appendReplacement(sb, "${first}" + elementName + "${last}");
}
matcher.appendTail(sb);
return sb.toString();
}
Map<String, Object> convertJson(String json) throws IOException {
return mapper.readValue(json, new TypeReference<Map<String, Object>>(){});
}
public String convertJsonToXml(String json) throws IOException {
return convertToXml(convertJson(json));
}
}
はconvertJsonToXmlのJUnitテストです:
@Test
void convertJsonToXml() throws IOException, ParserConfigurationException, SAXException {
try(InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream("json/customer_sample.json")) {
String json = new Scanner(in).useDelimiter("\\Z").next();
String xml = converter.convertJsonToXml(json);
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(new ByteArrayInputStream(xml.getBytes("UTF-8")));
Node first = doc.getFirstChild();
assertNotNull(first);
assertTrue(first.getChildNodes().getLength() > 0);
}
}
- 1. 最も簡単な方法
- 2. 最も簡単な方法
- 3. C#XMLデータを取得する最も簡単な方法
- 4. JsonをJava(Jackson)に変換する簡単な方法
- 5. XMLで属性を読み取る最も簡単な方法
- 6. ParaViewのシリアルファイルをパラレルに変換する最も簡単な方法
- 7. バイト配列をJavaのBlobに変換する最も簡単な方法
- 8. 数字を年月に変換する最も簡単な方法
- 9. ビデオストリームで2Dシンボルを3Dに変換する最も簡単な方法
- 10. バイト配列をWPFビットマップに変換する最も簡単な方法は
- 11. RubyのLatitude/zip/city/stateをタイムゾーンに変換する最も簡単な方法
- 12. このXMLドキュメントを自分のオブジェクトに変換する最も簡単な方法は何ですか?
- 13. C#でXSLTを使用してXMLをHTMLに変換する最も簡単な方法は?
- 14. TCL TKをスタンドアロンアプリケーションに変換する最も簡単なステップ
- 15. JSON文字列をjavabeanに変換/マップする最も簡単な方法は何ですか?
- 16. アンドロイドアプリケーションでJsonファイルを開く最も簡単な方法
- 17. JSONをCSVに変換するもっとも簡単な方法(配列をフィールドに含める)
- 18. SQL ServerからクライアントにXMLを出力する最も簡単な方法
- 19. 最も簡単な一連のjavascript/jQueryイベントの最新のものを守る最も簡単な方法
- 20. もっと簡単な方法がないデータフレームを変換
- 21. 作成と最も簡単な方法
- 22. 最も簡単な方法 - Ruby on Rails
- 23. 最も簡単な方法realloc
- 24. 最も簡単な方法は、プログラム
- 25. 最も簡単な方法は、垂直
- 26. 最も簡単な方法は、Express
- 27. 最も簡単な方法は、
- 28. Pythonで簡単なGUIを開発する最も簡単な方法
- 29. 簡単な3Dアイオスアプリを作成する最も簡単な方法
- 30. json-c:サブアレイから値にアクセスする最も簡単な方法
あなたのUI上のJavaScriptでJSONを読んで、それを解析する必要がありかもしれません。 (それに応じて表示されます)。 [ここ](http://www.webmasterworld.com/javascript/3540648.htm)を参照する必要がある場合 – Nishant
JSON **は**テキストです。 –
[this](http://stackoverflow.com/questions/559296/java-implementation-of-json-to-xml-conversion)と[this](http://www.discursive.com/books/)を参照してください。 cjcook/reference/json-sect-convert-json-xml)これがあなたを助けてくれることを願っています。 – Sandy