Преобразовать строку с вложенными символами в указанный c json формат в java - PullRequest
1 голос
/ 29 января 2020

Есть строка вроде:

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 вложенных, но точка это строка запрос может быть расширен до любого количества вложенных локонов.

Ответы [ 2 ]

1 голос
/ 30 января 2020

Спасибо, Хорхе. Этот метод может быть вызван для получения 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;

}
1 голос
/ 29 января 2020

Что я сделал, так это перебирал объекты в строке, а затем перебирал атрибуты каждого объекта. Надеюсь, это поможет вам решить вашу проблему. Кроме того, в вашей исходной строке вам не хватает открытых скобок и закрывающих скобок, поэтому я добавил их.

    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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...