Java - '\' 未用于转义字符串中的双引号 "
Java - '\' not being used to escape double quotes " in string
我在字节缓冲区中有一些 JSON 内容:{\"ID\":101}"}
此内容是从服务调用返回的。我从字节缓冲区中的微服务中获得结果。 (这意味着 - 我无法更改内容)
现在,我需要从此缓冲区中获取 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 对象时,出现错误:
"Missing value at 1 [character 2 line 1]"
这可能是因为“\”没有被用来转义双引号字符(我认为)。
所以,我的问题是,如何修改我的字符串以正确处理 '\' 字符?
我试过替换“\”。但它没有用。我不知道为什么。
我也尝试了不同的字符集编码:US-ASCII 和 ASCII 但得到了相同的结果。
使用 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);
}
}
希望代码适合您。
好好编码...
你可以试试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
其中包含 \。
我在字节缓冲区中有一些 JSON 内容:{\"ID\":101}"}
此内容是从服务调用返回的。我从字节缓冲区中的微服务中获得结果。 (这意味着 - 我无法更改内容)
现在,我需要从此缓冲区中获取 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 对象时,出现错误:
"Missing value at 1 [character 2 line 1]"
这可能是因为“\”没有被用来转义双引号字符(我认为)。
所以,我的问题是,如何修改我的字符串以正确处理 '\' 字符?
我试过替换“\”。但它没有用。我不知道为什么。 我也尝试了不同的字符集编码:US-ASCII 和 ASCII 但得到了相同的结果。
使用 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);
}
}
希望代码适合您。
好好编码...
你可以试试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
其中包含 \。