【问题标题】:How can i remove an element or attribute from a json output while parsing from xml, using java使用java从xml解析时如何从json输出中删除元素或属性
【发布时间】:2020-10-22 23:19:45
【问题描述】:
{"users": {
    "report": {
        "sub": "eng",
        "score": 30
    },
    "user": {
        "name": "test1",
        "age": 20
    }
}}

我的代码是:

打包项目.example;

导入 org.json.JSONObject; 导入 org.json.XML;

公共类 Xml2Json {

private static final int PRETTY_PRINT_INDENT_FACTOR = 4;

public static void main(String[] args) {
    
    String xmlString = "<users><user name=test1 age=20></user><report sub=eng score=30></report></users>";
    JSONObject jsonObject = XML.toJSONObject(xmlString);

system.out.println(jsonObject);

这是我使用 java 将 xml 解析为 json 时得到的输出。 现在我想从此输出中删除 age=20。

谁能帮我解决这个问题? 提前致谢!

【问题讨论】:

  • 您想在解析完 xml 之后,还是在解析过程中删除它?在第一种情况下,您可以只使用一些字符串替换运算符。
  • 你能发布你当前的代码吗?
  • 显示你到目前为止所做的事情
  • @BartBarnard .. 我想在解析 xml 后删除它......我的意思是在获得这个 json 对象之后
  • @aeberhart 我对我的代码进行了一些更改。你能通过这个吗?

标签: java json xml


【解决方案1】:

考虑使用 XSLT 预处理 XML,或类似地后处理 JSON。

使用 XSLT 3.0,您可以将结构转换和 XML 到 JSON 的转换结合到一个操作中。

例如(假设您的 XML 的结构是固定的,只有值不同):

<xsl:transform version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output method="json"/>
<xsl:template match="/">
 <xsl:sequence select='
  map{"users": map {
    "report": map {
        "sub": string(/users/report/@sub),
        "score": string(/users/report/@score)
    },
    "user": map {
        "name": string(/users/user/@name)
    }
  }}'/>
</xsl:template>
</xsl:transform>

与使用XML.toJSONObject 等标准转换实用程序相比,这种方法的优势在于您可以完全控制生成的 JSON。

【讨论】:

  • ..我以前没有这方面的经验..我不明白你说什么..你能解释一下..还是谢谢你..
  • .. 非常感谢.. 但我只能使用 xml.. 所以这就是为什么我不能这样做
  • 很好。在不使用 XSLT 的情况下处理 XML 有点像在没有烤箱的情况下烤蛋糕,但如果这是您的公司对您的要求,那么祝您好运。
【解决方案2】:

如果您不想使用 XSLT,这也可以:

String xmlString =
        "<users><user name=test1 age=20></user><report sub=eng score=30></report></users>";
JSONObject jsonObject = XML.toJSONObject(xmlString);
jsonObject.getJSONObject("users").getJSONObject("user").remove("age");
System.out.println(jsonObject);

阅读您的最后一条评论。你几乎是对的。只是顺序错了。您正在从顶部遍历 JSON 树。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-18
    • 1970-01-01
    • 2021-04-25
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多