/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
{
"String Notify : {\"id\": \"1234\", \"transactionId\": \"TR-001\", \"timestamp\": \"1575445871\"} with result success",
"String Notify : {\"id\": \"1234\", \"transaction\": { \"id\" : \"TR-002\" }, \"timestamp\": \"1575445871\"} with result success",
"String Notify : {\"id\": \"1234\", \"transaction\": { \"id\" : \"TR-002\" }, \"timestamp\": \"1575445871\" which should fail"
};
System.
out.
println("Parsing " + input
); System.
out.
println(extractJson
(input
)); }
}
int depth=0;
StringBuilder currentJsonString=new StringBuilder();
boolean containsValidJson = false;
for (char c: input.toCharArray()) {
if (c == '{') { depth++; }
else if (c == '}' && depth > 0) { // if depth==0, the } isn't part of a JSON object
depth--;
if (depth == 0) {
currentJsonString.append(c);
containsValidJson = true;
break;
}
}
if (depth > 0) { currentJsonString.append(c); }
}
if (containsValidJson) {
return currentJsonString.toString();
} else {
return null; // or better, throw exception
}
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgSWRlb25lCnsKCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbgoJewoJCVN0cmluZ1tdIGlucHV0cyA9IHsKCQkJIlN0cmluZyBOb3RpZnkgOiB7XCJpZFwiOiBcIjEyMzRcIiwgXCJ0cmFuc2FjdGlvbklkXCI6IFwiVFItMDAxXCIsIFwidGltZXN0YW1wXCI6IFwiMTU3NTQ0NTg3MVwifSB3aXRoIHJlc3VsdCBzdWNjZXNzIiwKCQkJIlN0cmluZyBOb3RpZnkgOiB7XCJpZFwiOiBcIjEyMzRcIiwgXCJ0cmFuc2FjdGlvblwiOiB7IFwiaWRcIiA6IFwiVFItMDAyXCIgfSwgXCJ0aW1lc3RhbXBcIjogXCIxNTc1NDQ1ODcxXCJ9IHdpdGggcmVzdWx0IHN1Y2Nlc3MiLAoJCQkiU3RyaW5nIE5vdGlmeSA6IHtcImlkXCI6IFwiMTIzNFwiLCBcInRyYW5zYWN0aW9uXCI6IHsgXCJpZFwiIDogXCJUUi0wMDJcIiB9LCBcInRpbWVzdGFtcFwiOiBcIjE1NzU0NDU4NzFcIiB3aGljaCBzaG91bGQgZmFpbCIKCQl9OwoJCWZvciAoU3RyaW5nIGlucHV0IDogaW5wdXRzKSB7CgkJCVN5c3RlbS5vdXQucHJpbnRsbigiUGFyc2luZyAiICsgaW5wdXQpOwoJICAgIAlTeXN0ZW0ub3V0LnByaW50bG4oZXh0cmFjdEpzb24oaW5wdXQpKTsKCQl9Cgl9CgkKCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGV4dHJhY3RKc29uKFN0cmluZyBpbnB1dCkgewoJCWludCBkZXB0aD0wOwoJICAgIFN0cmluZ0J1aWxkZXIgY3VycmVudEpzb25TdHJpbmc9bmV3IFN0cmluZ0J1aWxkZXIoKTsKCSAgICBib29sZWFuIGNvbnRhaW5zVmFsaWRKc29uID0gZmFsc2U7CgkgICAgZm9yIChjaGFyIGM6IGlucHV0LnRvQ2hhckFycmF5KCkpIHsKCSAgICAgICAgaWYgKGMgPT0gJ3snKSB7IGRlcHRoKys7IH0KCSAgICAgICAgZWxzZSBpZiAoYyA9PSAnfScgJiYgZGVwdGggPiAwKSB7IC8vIGlmIGRlcHRoPT0wLCB0aGUgfSBpc24ndCBwYXJ0IG9mIGEgSlNPTiBvYmplY3QKCSAgICAgICAgICAgIGRlcHRoLS07CgkgICAgICAgICAgICBpZiAoZGVwdGggPT0gMCkgewoJICAgICAgICAgICAgICAgIGN1cnJlbnRKc29uU3RyaW5nLmFwcGVuZChjKTsKCSAgICAgICAgICAgICAgICBjb250YWluc1ZhbGlkSnNvbiA9IHRydWU7CgkgICAgICAgICAgICAgICAgYnJlYWs7CgkgICAgICAgICAgICB9CgkgICAgICAgIH0KCSAgICAgICAgaWYgKGRlcHRoID4gMCkgeyBjdXJyZW50SnNvblN0cmluZy5hcHBlbmQoYyk7IH0KCSAgICB9CgkgICAgaWYgKGNvbnRhaW5zVmFsaWRKc29uKSB7CgkgICAgCXJldHVybiBjdXJyZW50SnNvblN0cmluZy50b1N0cmluZygpOwoJICAgIH0gZWxzZSB7CgkgICAgCXJldHVybiBudWxsOyAvLyBvciBiZXR0ZXIsIHRocm93IGV4Y2VwdGlvbgoJICAgIH0KCX0KfQ==
Parsing String Notify : {"id": "1234", "transactionId": "TR-001", "timestamp": "1575445871"} with result success
{"id": "1234", "transactionId": "TR-001", "timestamp": "1575445871"}
Parsing String Notify : {"id": "1234", "transaction": { "id" : "TR-002" }, "timestamp": "1575445871"} with result success
{"id": "1234", "transaction": { "id" : "TR-002" }, "timestamp": "1575445871"}
Parsing String Notify : {"id": "1234", "transaction": { "id" : "TR-002" }, "timestamp": "1575445871" which should fail
null