无法正确解析JSON

时间:2013-02-25 20:32:02

标签: javascript json

application/x-javascript类型的回复中,我选择了可​​变的JSON部分。以下是JSON -

{
   "__ra":1,
   "payload":null,
   "data":[
      [
         "replace",
         "",
         true,
         {
            "__html": "\u003Cspan class=\"highlight fsm\" id=\"u_c_0\">I want this text only\u003C\/span>"
         }
      ]
   ]
}

从我从Stackoverflow获得的引用中,我能够以下列方式选择data内的内容 -

var temp = JSON.parse(resp).data;

但我的目标是仅获取__html值为I want this text only的文本部分。有人帮忙。

3 个答案:

答案 0 :(得分:2)

首先,您必须访问目标对象:

var html = JSON.parse(resp).data[0][3]._html;

但是你想要的输出是我只想要这个文字

html 变量不包含该文字,但有些html中您要查找的内容是 span

内的文字

如果您接受在项目中包含jQuery,则可以通过这种方式访问​​该内容

var text = $(html).text();

答案 1 :(得分:1)

首先,您需要对该数据更具体一些,以获取所需的文本字符串:

var temp = JSON.parse(resp).data[0][3]['__html'];

接下来,您需要搜索该字符串以提取所需的数据。这在很大程度上取决于你得到的回应的规律性。在任何情况下,您可能都需要使用正则表达式来解析响应中获得的字符串。

在这种情况下,您尝试在字符串中的<span>元素中获取文本。如果您的所有回复都是如此,您可以执行以下操作:

var text = /<span[^>]*>([^<]*)<\/span>/.exec(temp)[1];

这非常专门地在打开和关闭不包含其他HTML标记的一个span标记内查找文本。

在此处的表达式中查看的主要部分是([^<]*),它将捕获任何不是开口角度括号的字符<。这周围的一切都在寻找具有可选属性的<span>实例。 exec是您在temp字符串上执行的返回匹配的方法,[1]将为您提供第一个也是唯一的捕获(例如<span>标记之间的文本)。

您需要阅读有关RegExp的更多信息,以了解如何更具体地执行某些操作(或在您的问题中提供有关您正在寻找的响应模式的更具体信息)。但是,如果你要做这种工作(解析文本,寻找模式和匹配),那么通常非常值得阅读正则表达式,因为它们是一种非常简洁和强大的方法,如果有点困惑的话

答案 2 :(得分:1)

把它们放在一起:

var html = JSON.parse(resp).data[0][3]._html;
var div = document.createElement("div");
div.innerHTML = html;
var text = div.textContent || div.innerText || "";

Kudos @Tim Down关于跨浏览器innerHTML的答案:JavaScript: How to strip HTML tags from string?