【问题标题】:Convert string with nested characters into specific json like format in java将带有嵌套字符的字符串转换为特定的json格式,如java中的格式
【发布时间】:2020-01-29 14:25:51
【问题描述】:

有这样一个字符串:

String query = "param1, param2, param3{npam1, npam2, npam3{nipam1, nipam2}}";

这个字符串需要按以下格式处理:

{

    param1: param1, 
    param2: param2, 
    param3: {

        npam1: param3.npam1, 
        npam2: param3.npam2, 
        npam3: {

            nipam1: param3.npam3.nipam1, 
            nipam2: param3.npam3.nipam2

        }

    }

}

已经完成了直到2个嵌套,但重点是要查询的字符串可以扩展到任意数量的嵌套卷曲。

【问题讨论】:

  • 我稍微格式化了你的问题。希望您的预期输出是我认为预期的格式。如果不能随意回滚我的更改。

标签: java json spring string spring-boot


【解决方案1】:

我所做的是遍历字符串中的对象,然后遍历每个对象的属性。希望它可以帮助您解决问题。同样在您的初始字符串中,您缺少左括号和右括号,所以我添加了它们。

    String jsonWithOutFormat = "param1, param2, param3{npam1, npam2, npam3{nipam1, nipam2}}";
    jsonWithOutFormat = jsonWithOutFormat.replaceAll(" ", "");
    String json = "";
    String[] objectsInString = jsonWithOutFormat.split("[{]");
    List<String> nestedObjects = new ArrayList<>();
    json += "{";
    for (int i = 0; i < objectsInString.length; i++) {
        String[] objectAttributes = objectsInString[i].split("[,]");
        if(i==0)
            nestedObjects.add(objectAttributes[objectAttributes.length-1] + ".");
        else
            nestedObjects.add(nestedObjects.get(i-1)+objectAttributes[objectAttributes.length-1] + ".");
        for (int j = 0; j < objectAttributes.length; j++) {
            if(!(j == objectAttributes.length-1)) {
                if(i != 0)
                    json+=  objectAttributes[j] + ": " +  nestedObjects.get(i-1) + objectAttributes[j]  + ", ";
                else
                    json+=  objectAttributes[j] + "\"" + ": " + "\"" + objectAttributes[j] + "\"" + ", ";
            }
            else {
                if(!(i == objectsInString.length-1))
                    json+=  objectAttributes[j] + ": {";
                else {
                    json+= objectAttributes[j].replaceAll("}", "")  + ": " + nestedObjects.get(i-1) + objectAttributes[j];
                }
            }
        }
    }
    json += "}";
    System.out.print("\n" + json);
}

【讨论】:

  • 谢谢。但不是 npam3: { nipam1: param3.npam3.nipam1, nipam2: param3.npam3.nipam2 } 输出是: npam3: { nipam1: nipam1, nipam2: nipam2 }
  • 你说得对,我在代码中添加了一些更改,让我知道这是否适合你
  • 谢谢!这是工作。但是,正如我所说,如果我在这种情况下插入一个嵌套对象:opam1 inside like:param1,param2,param3{npam1,npam2,npam3{nipam1{opam1},nipam2}},它会导致: { npam3: { nipam1: {opam1} : param3.npam3.nipam1.opam1, nipam2: param3.npam3.nipam2 } 相反,在嵌套对象的键值中,不应有卷曲。
  • 它没有为更深层次的嵌套对象提供与输出相同的模式。你能帮忙吗?谢谢!
  • 很高兴听到这个消息,您可以编辑答案与他人分享。
【解决方案2】:

谢谢豪尔赫。通过传递实际的字符串(未格式化的字符串),可以调用此方法以生成所需格式的 json。

public String expressionConstruct(String jsonWithOutFormat) {

    jsonWithOutFormat = jsonWithOutFormat.replaceAll(" ", "");
    String json = "";
    String[] objectsInString = jsonWithOutFormat.split("[{]");
    List<String> nestedObjects = new ArrayList<>();
    json += "{";
    for (int i = 0; i < objectsInString.length; i++) {
        String[] objectAttributes = objectsInString[i].split("[,]");
        if(i==0)
            nestedObjects.add(objectAttributes[objectAttributes.length-1] + ".");
        else
            nestedObjects.add(nestedObjects.get(i-1)+objectAttributes[objectAttributes.length-1] + ".");
        for (int j = 0; j < objectAttributes.length; j++) {
            if(!(j == objectAttributes.length-1)) {
                if(i != 0)
                    json+=  objectAttributes[j].replaceAll("}", "") + ": " +  nestedObjects.get(i-1) + objectAttributes[j]  + ", ";
                else
                    json+=  objectAttributes[j] + ": " + objectAttributes[j] + ", ";
            }
            else {
                if(!(i == objectsInString.length-1))
                    json+=  objectAttributes[j] + ": {";
                else {
                    json+= objectAttributes[j].replaceAll("}", "")  + ": " + nestedObjects.get(i-1) + objectAttributes[j];
                }
            }
        }
    }
    json += "}";
    return json;

}

【讨论】:

    猜你喜欢
    • 2020-02-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-01
    • 1970-01-01
    • 2022-11-21
    • 1970-01-01
    相关资源
    最近更新 更多