目次
XML と JSON の変換を org.json を使って行う方法を紹介します。
環境
- Kotlin 1.2.41
- org.json 20180130
コード例
Gradle を使ってプロジェクトを作成します。 dependencies
に org.json
を追加します。
1 2 3 4 5 |
dependencies { compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" // https://mvnrepository.com/artifact/org.json/json compile group: 'org.json', name: 'json', version: '20180130' } |
変換そのものは org.json
がやってくれます。 Kotlin ではそれを呼び出すだけです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
import org.json.JSONObject import org.json.XML fun convertJsonStringToXmlString(jsonString: String, tagName: String? = null): String { return XML.toString(JSONObject(jsonString), tagName) } fun convertJsonToXmlString(json: JSONObject, tagName: String? = null): String { return XML.toString(json, tagName) } fun convertXmlStringToJson(xmlString: String): JSONObject { return XML.toJSONObject(xmlString) } fun convertXmlStringToJsonString(xmlString: String, indentFactor: Int = 0): String { return convertXmlStringToJson(xmlString).toString(indentFactor) } |
XML から JSON への変換
XML.toString
で XML から JSON への変換ができます。 第1引数は JSONObject のインスタンス、 第2引数は、XML全体をタグで囲む場合にタグ名を渡します。
出力されるJSONのキーは、文字列としてソートされて出力されます。
XMLの単独タグ、属性を含んだ実行サンプルを掲載します。
1 2 3 4 5 6 |
println(convertXmlStringToJsonString( "<a>a</a><f /><a>b</a><a>c</a><b><a>1</a><b>2</b></b><c>true</c>")) // {"a":["a","b","c"],"b":{"a":1,"b":2},"c":true,"f":""} println(convertXmlStringToJsonString( "<p a=\"1\"><a a=\"1\">a</a><a>b</a><a>c</a><b><a>1</a><b>2</b></b><c>true</c></p>")) // {"p":{"a":[1,{"a":1,"content":"a"},"b","c"],"b":{"a":1,"b":2},"c":true}} |
JSON から XML への変換
JSONObject の toString
メソッド を使います。 引数でインデントに使用する半角スペースの数を渡します。 0
を渡すと改行なしの文字列がアウトプットされます。
属性付きのXMLをJSONに変換したものは、元のXMLに正しく逆変換できません。
実行サンプルを掲載します。
1 2 3 4 5 6 7 8 |
println(convertJsonStringToXmlString(""" {"a":["a","b","c"],"b":{"a":1,"b":2},"c":true,"f":""} """)) // <a>a</a><a>b</a><a>c</a><b><a>1</a><b>2</b></b><c>true</c><f/> println(convertJsonStringToXmlString(""" {"a":[1,{"a":1,"content":"a"},"b","c"],"b":{"a":1,"b":2},"c":true} """, "p")) // <p><a>1</a><a><a>1</a>a</a><a>b</a><a>c</a><b><a>1</a><b>2</b></b><c>true</c></p> |
サンプルコードは GitHub にPUSHしてあります。