【问题标题】:How to remove elements from json, while parsing from xml using java如何从json中删除元素,同时使用java从xml解析
【发布时间】:2020-07-09 12:09:15
【问题描述】:
import org.json.JSONObject;
import org.json.XML;

public class Example {
        public static void main(String[] args) {
        String xmlString = "<users><user name=test1 age=20></user><type><direct num=3></direct></type><report sub=eng score=30></report></users>";
        JSONObject jsonObject = XML.toJSONObject(xmlString);
        System.out.println(jsonObject);
    }
}

我可以在从 xml 转换为 json 后删除元素。但实际上我需要的是,在转换过程中应该删除元素或属性。

我需要的输出是:

{
  "users": {
    "report": {
      "score": 30
    },
    "type": {
      "direct": {
        "num": 3
      }
    },
    "user": {
      "age": 20
    }
  }
}

【问题讨论】:

    标签: java json xml


    【解决方案1】:

    XML 类不提供排除标签的方法。一种可能的解决方案是更新字符串以删除标签,如下所示,

    例如排除type标签,

    String splits[] = xmlString.split("(<\\/type>|<type>)");
    xmlString = splits[0]+splits[2];
    
    JSONObject jsonObject = XML.toJSONObject(xmlString);
    System.out.println(jsonObject);
    

    输出:

    {"users":{"report":{"sub":"eng","score":30},"user":{"name":"test1","age":20}}}

    要从用户标签中删除名称元素,

    String xmlString = "<users><user name=test1 age=20></user><type><direct num=3></direct></type><report sub=eng score=30></report></users>";
    
    //split by user tags
    String splits[] = xmlString.split("(<\\/user>|<user )");
    
    //remove name filed and combine other elements
    String user1 = Arrays.stream(splits[1].split(" "))
            .filter(s->!s.contains("name"))
            .collect(Collectors.joining(" "));
    
    //merge strings and user tag
    xmlString = splits[0] + "<user " + user1 + "</user>" + splits[2];
    
    JSONObject jsonObject = XML.toJSONObject(xmlString);
    

    输出::

    {
        "users": {
            "report": {
                "sub": "eng",
                "score": 30
            },
            "type": {
                "direct": {
                    "num": 3
                }
            },
            "user": {
                "age": 20
            }
        }
    }
    

    更新: 最好的解决方案是从JsonObject 中删除,

    jsonObject.getJSONObject("users").getJSONObject("user").remove("name")
    

    【讨论】:

    • 你能指定你是否使用过任何库吗?这段代码给了我错误:数组,收集器无法解析
    • 这些是 java-8 的特性。
    • 那是我的错误.. 当我导入数组时,它开始工作了。
    • 你能告诉我一个代码来删除上述问题的'sub'元素或'num'元素吗
    • 您可以按照相同的步骤,而不是用户使用报告,而不是名称使用子
    【解决方案2】:

    org.json.XML 包不提供内部 XML 修改。如果一定要使用这个,就必须自己在json中进行必要的修改。否则,您可以使用 java 默认 xml 解析器对 xml 进行预处理,将其转换为字符串,然后再转换为 json。

    【讨论】:

    • 我尝试的是,在处理后从 json 中删除元素。但是为了减少步骤,我不允许这样做。
    • 我不知道在解析时删除东西..你能解释一下吗?
    • 是否允许使用 xml 解析器作为预处理步骤?您的输入是否也始终是 XML?如果是,我可以为您提供如何解析和编辑 XML,否则您需要进行如下所述的字符串修改。
    • 为了减少步骤,您不需要从 JSON 中删除很多步骤,在这种情况下,这将是一个完美的解决方案。 jsonObject.getJSONObject("users").getJSONObject("user").remove("name")
    猜你喜欢
    • 2020-10-22
    • 1970-01-01
    • 2021-04-25
    • 1970-01-01
    • 1970-01-01
    • 2015-08-18
    • 1970-01-01
    • 2014-01-07
    • 1970-01-01
    相关资源
    最近更新 更多