import java.util.ArrayList;
import java.util.List;
public class Main {
"{ \n" +
" \"vinForRepair\" : \"ABCDE123455432199\",\n" +
" \"dateOfRepair\" : \"17/08/2021\",\n" +
" \"mileage\" : 100000,\n" +
" \"items\" : [ {\n" +
" \"description\" : \"Water pump\",\n" +
" \"quantity\" : 1,\n" +
" \"price\" : 120.0,\n" +
" \"metric\" : \"UNIT\n" +
"}, { <---------This should be ignored\n" +
" \"description\" : \"Motor oil\",\n" +
" \"quantity\" : 1,\n" +
" \"price\" : 30.0,\n" +
" \"metric\" : \"LITER\"\n" +
" } ]\n" +
"}, { <---------This is where i want to split\n" +
" \"vinForRepair\" : \"ABCDE123455432100\",\n" +
" \"dateOfRepair\" : \"15/08/2021\",\n" +
" \"mileage\" : 250000,\n" +
" \"items\" : [ {\n" +
" \"description\" : \"Break fluid\",\n" +
" \"quantity\" : 1,\n" +
" \"price\" : 20.0,\n" +
" \"metric\" : \"LITER\"\n" +
" }, { <---------This should be ignored\n" +
" \"description\" : \"Tyre\",\n" +
" \"quantity\" : 2,\n" +
" \"price\" : 80.0,\n" +
" \"metric\" : \"UNIT\"\n" +
" } ]\n" +
"}";
public static void main
(String[] args
) { List<String> jsons = split(json);
System.
out.
println(jsons.
size()); jsons.forEach(it -> {
System.
out.
println("-------"); });
}
private static List
<String
> split
(String json
) { List<String> result = new ArrayList<>();
int depth = 0;
int start = 0;
for (int i = 0; i < json.length(); i++) {
if (json.charAt(i) == '{') {
if (depth == 0) {
start = i;
}
depth++;
}
if (json.charAt(i) == '}') {
depth--;
if (depth == 0) {
result.add(json.substring(start, i + 1));
}
}
}
return result;
}
}
aW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CmltcG9ydCBqYXZhLnV0aWwuTGlzdDsKCnB1YmxpYyBjbGFzcyBNYWluIHsKCiAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcganNvbiA9CiAgICAgICAgICAgICJ7IFxuIiArCiAgICAgICAgICAgICIgIFwidmluRm9yUmVwYWlyXCIgOiBcIkFCQ0RFMTIzNDU1NDMyMTk5XCIsXG4iICsKICAgICAgICAgICAgIiAgXCJkYXRlT2ZSZXBhaXJcIiA6IFwiMTcvMDgvMjAyMVwiLFxuIiArCiAgICAgICAgICAgICIgIFwibWlsZWFnZVwiIDogMTAwMDAwLFxuIiArCiAgICAgICAgICAgICIgIFwiaXRlbXNcIiA6IFsge1xuIiArCiAgICAgICAgICAgICIgICAgXCJkZXNjcmlwdGlvblwiIDogXCJXYXRlciBwdW1wXCIsXG4iICsKICAgICAgICAgICAgIiAgICBcInF1YW50aXR5XCIgOiAxLFxuIiArCiAgICAgICAgICAgICIgICAgXCJwcmljZVwiIDogMTIwLjAsXG4iICsKICAgICAgICAgICAgIiAgICBcIm1ldHJpY1wiIDogXCJVTklUXG4iICsKICAgICAgICAgICAgIn0sIHsgICAgICAgICA8LS0tLS0tLS0tVGhpcyBzaG91bGQgYmUgaWdub3JlZFxuIiArCiAgICAgICAgICAgICIgICAgXCJkZXNjcmlwdGlvblwiIDogXCJNb3RvciBvaWxcIixcbiIgKwogICAgICAgICAgICAiICAgIFwicXVhbnRpdHlcIiA6IDEsXG4iICsKICAgICAgICAgICAgIiAgICBcInByaWNlXCIgOiAzMC4wLFxuIiArCiAgICAgICAgICAgICIgICAgXCJtZXRyaWNcIiA6IFwiTElURVJcIlxuIiArCiAgICAgICAgICAgICIgIH0gXVxuIiArCiAgICAgICAgICAgICJ9LCB7ICAgICAgICAgPC0tLS0tLS0tLVRoaXMgaXMgd2hlcmUgaSB3YW50IHRvIHNwbGl0XG4iICsKICAgICAgICAgICAgIiAgXCJ2aW5Gb3JSZXBhaXJcIiA6IFwiQUJDREUxMjM0NTU0MzIxMDBcIixcbiIgKwogICAgICAgICAgICAiICBcImRhdGVPZlJlcGFpclwiIDogXCIxNS8wOC8yMDIxXCIsXG4iICsKICAgICAgICAgICAgIiAgXCJtaWxlYWdlXCIgOiAyNTAwMDAsXG4iICsKICAgICAgICAgICAgIiAgXCJpdGVtc1wiIDogWyB7XG4iICsKICAgICAgICAgICAgIiAgICBcImRlc2NyaXB0aW9uXCIgOiBcIkJyZWFrIGZsdWlkXCIsXG4iICsKICAgICAgICAgICAgIiAgICBcInF1YW50aXR5XCIgOiAxLFxuIiArCiAgICAgICAgICAgICIgICAgXCJwcmljZVwiIDogMjAuMCxcbiIgKwogICAgICAgICAgICAiICAgIFwibWV0cmljXCIgOiBcIkxJVEVSXCJcbiIgKwogICAgICAgICAgICAiICB9LCB7ICAgICAgIDwtLS0tLS0tLS1UaGlzIHNob3VsZCBiZSBpZ25vcmVkXG4iICsKICAgICAgICAgICAgIiAgICBcImRlc2NyaXB0aW9uXCIgOiBcIlR5cmVcIixcbiIgKwogICAgICAgICAgICAiICAgIFwicXVhbnRpdHlcIiA6IDIsXG4iICsKICAgICAgICAgICAgIiAgICBcInByaWNlXCIgOiA4MC4wLFxuIiArCiAgICAgICAgICAgICIgICAgXCJtZXRyaWNcIiA6IFwiVU5JVFwiXG4iICsKICAgICAgICAgICAgIiB9IF1cbiIgKwogICAgICAgICAgICAifSI7CgogICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgIExpc3Q8U3RyaW5nPiBqc29ucyA9IHNwbGl0KGpzb24pOwogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihqc29ucy5zaXplKCkpOwogICAgICAgIGpzb25zLmZvckVhY2goaXQgLT4gewogICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0iKTsKICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGl0KTsKICAgICAgICB9KTsKICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyBMaXN0PFN0cmluZz4gc3BsaXQoU3RyaW5nIGpzb24pIHsKICAgICAgICBMaXN0PFN0cmluZz4gcmVzdWx0ID0gbmV3IEFycmF5TGlzdDw+KCk7CiAgICAgICAgaW50IGRlcHRoID0gMDsKICAgICAgICBpbnQgc3RhcnQgPSAwOwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwganNvbi5sZW5ndGgoKTsgaSsrKSB7CiAgICAgICAgICAgIGlmIChqc29uLmNoYXJBdChpKSA9PSAneycpIHsKICAgICAgICAgICAgICAgIGlmIChkZXB0aCA9PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSBpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZGVwdGgrKzsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoanNvbi5jaGFyQXQoaSkgPT0gJ30nKSB7CiAgICAgICAgICAgICAgICBkZXB0aC0tOwogICAgICAgICAgICAgICAgaWYgKGRlcHRoID09IDApIHsKICAgICAgICAgICAgICAgICAgICByZXN1bHQuYWRkKGpzb24uc3Vic3RyaW5nKHN0YXJ0LCBpICsgMSkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9Cgp9Cg==
2
-------
{
"vinForRepair" : "ABCDE123455432199",
"dateOfRepair" : "17/08/2021",
"mileage" : 100000,
"items" : [ {
"description" : "Water pump",
"quantity" : 1,
"price" : 120.0,
"metric" : "UNIT
}, { <---------This should be ignored
"description" : "Motor oil",
"quantity" : 1,
"price" : 30.0,
"metric" : "LITER"
} ]
}
-------
{ <---------This is where i want to split
"vinForRepair" : "ABCDE123455432100",
"dateOfRepair" : "15/08/2021",
"mileage" : 250000,
"items" : [ {
"description" : "Break fluid",
"quantity" : 1,
"price" : 20.0,
"metric" : "LITER"
}, { <---------This should be ignored
"description" : "Tyre",
"quantity" : 2,
"price" : 80.0,
"metric" : "UNIT"
} ]
}