是否从JSON文件中检测并解析转义字符“ \”?

我的数据是JSON文件时遇到问题。我正在使用Google的以下链接。

http://www.google.com/finance/company_news?q=AAPL&output=json"

当我想解析数据并将其显示在屏幕上时,会发生我的问题。由于某种原因,数据未正确解码。

原始数据:

 1.) one which must have set many of the company\x26#39;s board on the edge of their

2.) Making Less Money From Next \x3cb\x3e...\x3c/b\x3e

当我输入数据时,请执行以下操作:

DefaultHttpClient httpClient = new DefaultHttpClient();

HttpPost httpPost = new HttpPost(url);

HttpResponse httpResponse = httpClient.execute(httpPost);

HttpEntity httpEntity = httpResponse.getEntity();

is = httpEntity.getContent();

BufferedReader reader = new BufferedReader(new InputStreamReader(

is, "iso-8859-1"), 8);

StringBuilder sb = new StringBuilder();

String line = null;

while ((line = reader.readLine()) != null) {

sb.append(line + "n");

}

is.close();

json = sb.toString();

我收到的输出是以下内容(使用org.json从json文件中提取数据)(请注意,缺少反斜杠):

1.)one which must have set many of the companyx26#39;s board on the edge of their

2.)Making Less Money From Next x3cbx3e...x3c/bx3e

我目前用于处理第一个问题的方法:

JSONRowData.setJTitle((Html.fromHtml((article.getString(TAG_TITLE).replaceAll("x26", "&")))).toString());

第二个虽然逃脱了我(没有双关语)

我认为这不起作用的原因是转义字符用于转义字符。香港专业教育学院尝试了许多不同的方法来读取数据,但我没有运气。有没有一种方法可以导入数据来解决此问题,而无需使用正则表达式?


今天我们的宿敌:“ \ x26”-ASCII(十六进制表示法)

将原始数据读取到Char数组中。apache的commons.io库是执行此操作的好方法。完成此操作后,在for循环中读取char数组以查找“

\”,如果有命中,请在下一个数组位置查找“

x”。如果再次命中,请在char数组中获取下两个字符。这两个字符是您的ASCII十六进制值。将十六进制转换为十进制形式,然后将十进制转换为字符。将此字符添加到字符串生成器中。

如果没有匹配项(带有“ \”),则将char附加到字符串生成器。现在,我们可以调用该.toString()方法并将其转换为字符串。

从那里,数据可能包含一些HTML残余(’和/或 ****在这种情况下)。 使用Html.fromHtml()进行此操作。

回答:

这里的问题是google-或至少是url- 提供了 无效的 JSON

1,2。JSON库虽然没有完全拒绝无效的JSON,但仍以“好吧,让我们忽略这种\废话并继续”的方式对其进行解析。也就是说,错误的不是

渲染 ,而是错误的 输入

1它 允许\x在一个字符串(出现 除了

如果\是本身逸出)如\(当没有逃脱)只能和随之的小的字符集(其不包括x)。字符代码的转义必须由\u1234而不是\x12

我能想到的唯一“修补程序”确实是骇人听闻的骇客:例如,读取原始文本并转换\x12\u0012。(实际上,这不是

一个黑客不好,因为没有上下文敏感的东西需要被考虑;但是,它应该 不会 !需要可耻的是谷歌)

2提取了 无效的 JSON字符串文字:

“苹果公司(纳斯达克股票代码:AAPL)的股票今年继续领跑大盘科技股,表现最佳。在周一开始的关键事件之后,该股票的价格没有太大变化。”

(要使其有效,请替换\x26\u0026&。)

祝您编程愉快,祝您好运:)


在Java中,一种[未经测试]的方法可能是使用正则表达式(通过String.replaceAll):

inputString.replaceAll("\\x(\d{2})", "\\u00$1")

以上是 是否从JSON文件中检测并解析转义字符“ \”? 的全部内容, 来源链接: utcz.com/qa/417187.html

回到顶部