как преобразовать неправильный формат строки в JSONObject - PullRequest
0 голосов
/ 27 мая 2020

Я получаю неправильный формат строки json из ответа. Теперь мне нужно это исправить. Но я не умею. Ниже приведен ответ, который я получаю от API, относящегося к mongodb:

{
        "_id" : ObjectId("5ecd66aa9fd30b21cac18beb"),
        "_class" : "com.wpits.mongo.docs.UssdMongoLog",
        "jsonObject" : {
                "message" : "MessageBase{CommandLength=148, CommandID=BasicContinue, CommandStatus=0, SenderCB=-516163402, ReceiverCB=1896231456, AccountName=atg189, Password=AtG189, SystemType=, InterfaceVersion=23, UssdVersion=PHASEIII, UssdOpType=Request, MsIsdn=211919002392, ServiceCode=152, CodeScheme=sevenDigit, UssdString=Reply with Song Id to Subscribe.\n870. Nixx Corona IVR English 02\n295. Nixx Tone\n\n #. Main Menu, SwitchMode=0, ChargeRatio=0, ChargeType=0, ChargeSource=null, ChargeLocation=0, Message=null}",
                "timestamp" : "2020-05-26 09:58:398"
        }
}

Теперь, как видно, ключ message имеет значение, которое не соответствует формату JSON. Я хотел, чтобы это было как показано ниже:

"message" : "MessageBase" : {"CommandLength"="148", "CommandID"="BasicContinue", "CommandStatus"="0", "SenderCB"="-516163402", "ReceiverCB"="1896231456", "AccountName"="atg189", "Password"="AtG189", "SystemType"="", "InterfaceVersion"="23", "UssdVersion"="PHASEIII", "UssdOpType"="Request",....}

Я использую org.json.simple.JSONObject и org.json.simple.JSONParser, как показано ниже:

public static void main(String[] args) {
    try {
    JSONObject obj = new JSONObject();
    obj.put("message", "MessageBase{CommandLength=148, CommandID=BasicContinue, CommandStatus=0, SenderCB=-516163402, ReceiverCB=1896231456, AccountName=atg189, Password=AtG189, SystemType=, InterfaceVersion=23, UssdVersion=PHASEIII, UssdOpType=Request, MsIsdn=211919002392, ServiceCode=152, CodeScheme=sevenDigit, UssdString=Reply with Song Id to Subscribe.\n870. Nixx Corona IVR English 02\n295. Nixx Tone\n\n #. Main Menu, SwitchMode=0, ChargeRatio=0, ChargeType=0, ChargeSource=null, ChargeLocation=0, Message=null}");
    String msg = (String)obj.get("message");
    msg = msg.replace("MessageBase", "\"MessageBase\" : ");
    JSONParser parser = new JSONParser();
    JSONObject obj2 = (JSONObject)parser.parse(msg);
    System.out.println(obj2.toJSONString());
    }catch(Exception ex) {
        ex.printStackTrace();
    }
}

Но не могу этого сделать ... любой служебный класс, который я могу использовать для исправления этого формата?

edit

на основе предложения @libanbn, которое я пробовал с помощью следующей программы:

    public static void main(String[] args) {
    try {
    JSONObject obj = new JSONObject();
    obj.put("message", "MessageBase{CommandLength=148, CommandID=BasicContinue, CommandStatus=0, SenderCB=-516163402, ReceiverCB=1896231456, AccountName=atg189, Password=AtG189, SystemType=, InterfaceVersion=23, UssdVersion=PHASEIII, UssdOpType=Request, MsIsdn=211919002392, ServiceCode=152, CodeScheme=sevenDigit, UssdString=Reply with Song Id to Subscribe.\n870. Nixx Corona IVR English 02\n295. Nixx Tone\n\n #. Main Menu, SwitchMode=0, ChargeRatio=0, ChargeType=0, ChargeSource=null, ChargeLocation=0, Message=null}");
    String msg = (String)obj.get("message");

    msg = msg.replace("MessageBase", "");
    msg = msg.replace("\n", "");
    msg = msg.replace("{", "{\"");
    msg = msg.replace("}", "\"}");
    msg = msg.replace("=", "\"=\"");
    msg = msg.replace(",", "\",\"");
    msg = "{\"message\" : "+msg+"}";
    msg = msg.replace("=", ":");
    System.out.println(msg);
    JSONParser parser = new JSONParser();
    JSONObject obj2 = (JSONObject)parser.parse(msg);
    System.out.println(obj2.toJSONString());
    }catch(Exception ex) {
        ex.printStackTrace();
    }
}

это решило мою проблему ..

Ответы [ 2 ]

1 голос
/ 27 мая 2020

Вы можете видеть, что строка соответствует шаблону MessageBase{key=value, key=value, ...}.

Прежде чем пытаться преобразовать строку в объект JSON, необходимо изменить формат. Поскольку строка следует последовательному шаблону, вы можете использовать регулярные выражения, чтобы переформатировать ее перед синтаксическим анализом до JSON.

0 голосов
/ 27 мая 2020

Вы можете попробовать это .. Идея состоит в том, чтобы построить действительный json из вашей строки.

public static void main(String[] args) {
    try {
        JSONObject obj = new JSONObject();

        String msg = (String) obj.get("message");
        msg = "MessageBase{CommandLength=148, CommandID=BasicContinue, CommandStatus=0, SenderCB=-516163402, ReceiverCB=1896231456, AccountName=atg189, Password=AtG189, SystemType=, InterfaceVersion=23, UssdVersion=PHASEIII, UssdOpType=Request, MsIsdn=211919002392, ServiceCode=152, CodeScheme=sevenDigit, UssdString=Reply with Song Id to Subscribe.\n870. Nixx Corona IVR English 02\n295. Nixx Tone\n\n #. Main Menu, SwitchMode=0, ChargeRatio=0, ChargeType=0, ChargeSource=null, ChargeLocation=0, Message=null}";
        msg = msg.replace("MessageBase{", "{\"MessageBase\" : \"");
        msg = msg.substring(0, msg.length()-1).concat("\"}");
        JSONParser parser = new JSONParser();
        JSONObject obj2 = (JSONObject) parser.parse(msg);
        System.out.println(obj2.toJSONString());
    } catch (Exception ex) {
        ex.printStackTrace();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...