Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.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 如何将错误格式的字符串转换为JSONObject_Java_Json - Fatal编程技术网

Java 如何将错误格式的字符串转换为JSONObject

Java 如何将错误格式的字符串转换为JSONObject,java,json,Java,Json,我从响应中得到了错误的json字符串格式。现在我需要纠正它。但我做不到。下面是我从一些mongodb相关API得到的回复: { "_id" : ObjectId("5ecd66aa9fd30b21cac18beb"), "_class" : "com.wpits.mongo.docs.UssdMongoLog", "jsonObject" : { "message" : "MessageBase{CommandLen

我从响应中得到了错误的
json
字符串格式。现在我需要纠正它。但我做不到。下面是我从一些
mongodb
相关API得到的回复:

{
        "_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"
        }
}
现在可以看到,key
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();
    }
}
但不能做到这一点。。。是否有任何实用程序类可用于更正此格式

编辑

根据@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();
    }
}

它解决了我的问题。

您可以看到字符串遵循
MessageBase{key=value,key=value,…}
的模式


在尝试将字符串转换为JSON对象之前,必须更改格式。由于字符串遵循一致的模式,因此在解析为JSON之前,可以使用正则表达式对其进行重新格式化。

您可以尝试这样做。。其思想是从字符串构建有效的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();
    }
}

你好。。根据你的建议,我改变了计划。。请看编辑后的问题。。我想我很快就要解决这个难题了,实际上我忘了用
替换
=
。。非常感谢你的想法。