Java - '\'不用于在字符串中转义双引号

时间:2018-02-23 06:06:57

标签: java string bytebuffer

我在bytebuffer中有一些JSON内容:{\“ID \”:101}“}

此内容是从服务调用返回的。我从bytebuffer中获得微服务的结果。 (这意味着 - 我无法更改内容)

现在,我需要从这个缓冲区中获取json对象。我正在使用此代码:

            ByteBuffer payloadByteBuffer = invokeResult.getPayload();
            byte[] payloadByteArray = payloadByteBuffer.array();
            rawJson = new String(payloadByteArray, Charset.forName("UTF-8"));
            System.out.println("Raw JSon result = "+rawJson);

打印的字符串是:“{\”ID \“:101}”

请注意'\'在字符串中打印,但最初用于转义双引号。因此,当我尝试将此字符串转换为JSON对象时,出现错误:

“缺少值1 [字符2第1行]”

这可能是由于'\'没有被用来逃避双引号字符(我认为)。

所以,我的问题是,如何修改我的字符串以处理'\'字符是否正确?

我试过替换“\”。但它不起作用。我不知道为什么。 我也尝试了不同的字符集编码:US-ASCII和ASCII但得到了相同的结果。

2 个答案:

答案 0 :(得分:0)

如何使用apache的commons lang库?

我认为这是一种简单易行的方法,可以解决您的问题。

这是我的完整测试代码。

package just.test;

import java.nio.charset.Charset;

import org.apache.commons.lang3.StringEscapeUtils;
import org.json.JSONObject;

import com.ibm.icu.impl.ByteBuffer;

public class UnescapeCharTest {

    private static void testJSONString(final String rawJson)
    {
        JSONObject json = null;

        try
        {
            json = new JSONObject(rawJson);
            System.out.println("ID = "+json.get("ID"));
        }
        catch(org.json.JSONException je)
        {
            je.printStackTrace();
        }

        String convJson = rawJson.replace("\\", "");

        try
        {
            json = new JSONObject(convJson);
            System.out.println("ID = "+json.get("ID"));
        }
        catch(org.json.JSONException je)
        {
            je.printStackTrace();
        }

        convJson = StringEscapeUtils.unescapeJson(rawJson);

        try
        {
            json = new JSONObject(convJson);
            System.out.println("ID = "+json.get("ID"));
        }
        catch(org.json.JSONException je)
        {
            je.printStackTrace();
        }
    }

    public static void main(String[] args)
    {

        String rawJson = "{\\\"ID\\\":101}";

        testJSONString(rawJson);

        String rawJson2 = null;


        ByteBuffer payloadByteBuffer = ByteBuffer.wrap(rawJson.getBytes());

        byte[] payloadByteArray = payloadByteBuffer.array();
        rawJson2 = new String(payloadByteArray, Charset.forName("UTF-8"));

        testJSONString(rawJson2);


    }
}

我希望代码适合你。

有一个好的编码...

答案 1 :(得分:0)

您可以尝试json-simple。您可以使用here

中的依赖关系

P.S:您的JSON回复错误。

ByteBuffer payloadByteBuffer = invokeResult.getPayload();
byte[] payloadByteArray = payloadByteBuffer.array();
rawJson = new String(payloadByteArray, Charset.forName("UTF-8"));

JSONParser parser = new JSONParser();
try {
        JSONObject json = (JSONObject) parser.parse(rawJson);
} catch (ParseException e) {
    e.printStackTrace();
}

它会在JSON中解析 \