Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中将带有嵌套字符的字符串转换为特定的类似json的格式_Java_Json_Spring_String_Spring Boot - Fatal编程技术网

在java中将带有嵌套字符的字符串转换为特定的类似json的格式

在java中将带有嵌套字符的字符串转换为特定的类似json的格式,java,json,spring,string,spring-boot,Java,Json,Spring,String,Spring Boot,有一个字符串类似于: String query = "param1, param2, param3{npam1, npam2, npam3{nipam1, nipam2}}"; 此字符串需要按以下格式处理: { param1: param1, param2: param2, param3: { npam1: param3.npam1, npam2: param3.npam2, npam3: {

有一个字符串类似于:

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个嵌套,但关键是要查询的字符串可以扩展到任意数量的嵌套卷曲。

我所做的是迭代字符串中的对象,然后迭代每个对象的属性。希望它能帮助你解决问题。同样,在初始字符串中,缺少开括号和右括号,因此我添加了它们

    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);
}
String jsonWithOutFormat=“param1,param2,param3{npam1,npam2,npam3{nipam1,nipam2}”;
jsonWithOutFormat=jsonWithOutFormat.replaceAll(“,”);
字符串json=“”;
String[]objectsInString=jsonWithOutFormat.split(“[{]”);
List nestedObjects=new ArrayList();
json+=“{”;
for(int i=0;i
谢谢Jorge。通过传递实际字符串(未格式化的字符串),可以调用此方法以生成所需格式的json

公共字符串表达式构造(字符串jsonWithOutFormat){
jsonWithOutFormat=jsonWithOutFormat.replaceAll(“,”);
字符串json=“”;
String[]objectsInString=jsonWithOutFormat.split(“[{]”);
List nestedObjects=new ArrayList();
json+=“{”;
for(int i=0;i
我对您的问题设置了一点格式。希望您的预期输出是我假设的预期格式。如果您不能自由回滚我的更改。谢谢。但不是npam3:{nipam1:param3.npam3.nipam1,nipam2:param3.npam3.nipam2}输出是:npam3:{nipam1:nipam1,nipam2:nipam2}你是对的,我对代码添加了一些更改,让我知道这对YouTunks是否有效!它是有效的。但是,正如我所说的,如果我插入一个嵌套对象,如本例中所示:opam1-inside-like:param1,param2,param3{npam1,npam2,npam3{nipam1{opam1},nipam2},它会导致:{npam3:{nipam1:{opam1}:param3.npam3.nipam1.opam1,nipam2:param3.npam3.nipam2}相反,在嵌套对象的键值中,不应该有卷曲。它没有为更深层的嵌套对象提供与输出相同的模式。请提供帮助。谢谢!很高兴听到这个消息,您可以编辑答案与其他人共享。
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;

}