需要仅使用JAVA将XML转换为@和#格式的JSON

时间:2015-09-24 13:17:13

标签: java json xml transform

我想按照以下示例将xml转换为json: 示例XML:

$CloudServiceIp

预期的JSON输出:

Get-AzureService | Select-Object -Property ServiceName, `
   @{Name='ProdIP';Expression={(Get-AzureDeployment -Slot Production `
   -ServiceName $_.ServiceName).VirtualIPs[0].Address}} | Format-Table -AutoSize

请帮帮我。

2 个答案:

答案 0 :(得分:0)

创建数据的类表示。然后使用像Jackson这样理解JSON和XML的对象映射器。从XML反序列化并序列化为JSON。

答案 1 :(得分:0)

如果您使用的是Java 8,那么您应该查看我的unXml - 库。它是开源的,可在Maven Central上找到。

此代码适用于您的项目

toJson()

请注意,此库的重点是使用Xpath从XML中提取值,并将它们分配给Json Objects中的属性。所以你可以创造更好的" Json,它与xml结构没那么紧密。

实施例

import com.nerdforge.unxml.Parsing;
import com.nerdforge.unxml.factory.ParsingFactory;
import org.w3c.dom.Document;
import java.util.List;

public class Parser {
    public ObjectNode parseXml(String xml){
        Parsing parsing = ParsingFactory.getInstance().create();
        Document document = parsing.xml().document(xml);

        Parser<ObjectNode> parser = parsing.obj("Details")
            .attribute("Records", parsing.obj("Records")
                .attribute("name", parsing.obj("name")
                    .attribute("@id", "@id")
                    .attribute("#text", "text()")
                )
                .attribute("age", "age")
                .attribute("gender", parsing.obj("gender")
                    .attribute("@type", "@type")
                )
            )
            .build();

        ObjectNode result = parser.apply(document);
        return result;
    }
}

将返回json

public class Parser {
    public ArrayNode parseXml(String xml){
        Parsing parsing = ParsingFactory.getInstance().create();
        Document document = parsing.xml().document(xml);

        Parser<ArrayNode> parser = parsing.arr("//Records", parsing.obj()
            .attribute("id", "name/@id", parsing.number())
            .attribute("name") // name is both the xpath, and json-attribute key
            .attribute("age", "age", parsing.number())
            .attribute("gender", "gender/@type")
        ).build();

        ArrayNode result = parser.apply(document);
        return result;
    }
}

使用[{ id: 123, name: "xyz", age: 25, gender: "male" }] 创建数组。