将innerHTML内容转换回JSON

时间:2018-01-15 07:04:12

标签: javascript jquery json

我从PHP接收数据作为数组或数组,例如:public class BlogController : Controller { public int BlogCount = 0; // GET: Blog [Authorize] public ActionResult Index() { return View(); } public ActionResult Blogs(int id) { OMSDataContext db = new OMSDataContext(); Blog blog = new Blog(); var countrow = from c in db.Blogs where c.UserName == this.User.Identity.Name group c by c.Id into gp select new { Count = gp.Count(), }; BlogCount =Convert.ToInt32(countrow); ViewData["BlogCount"] = 0; //if(blog.UserName == this.User.Identity.Name) //{ // BlogCount = blog //} return View(); } 然后我在div中显示这些数据。然后,我浏览显示输出中的每个图像并更改src并添加属性。然后,我得到该div的[[1, "<p>hello</p><img src='blah.jpg'/>"], [2, "blah, blah"].....etc]并将其放在变量中。

的JavaScript

.innerHTML

我面临的问题是我想将var data = <?php echo $data; ?>; document.getElementById("info").innerHTML = data; var images = document.querySelectorAll("img"); for (var i = 0; i < images.length; ++i){ /*Get image path*/ var tempSrc = images[i].src; var imgName = tempSrc.split("/").pop(); /*Change image path to loading image*/ images[i].src = "../../resources/media/assets/650x450.png"; images[i].setAttribute('data-src', tempSrc); images[i].setAttribute('data-mobile-src', "/stories/media/images/small-images/" + imgName); } var transformedData = document.getElementById("info").innerHTML; console.log(transformedData); 解析回JSON,但我不能,因为现在transformedData又回到常规字符串。如何使transformedData返回到数组数组?

一些注释

例如,

var data = transformedData数据如下所示:<?php echo $data; ?>;[[1, "<p>hello</p><img src='blah.jpg'/>"]当我执行[2, "blah, blah"].....etc]时,它返回为对象因此它已被解析为JSON

console.log(typeof(data))无效我得到的错误是:JSON.parse()这就是转换数据的外观:Uncaught SyntaxError: Unexpected token , in JSON at position 1所以它不再是数组格式

4 个答案:

答案 0 :(得分:2)

获取数据后,您要做的第一件事就是将其推送到#info,这会对您的数据调用Array.toString()并且是有损的。相反,在发送出来进行显示之前,尽可能长时间使用数组。您可以为数据中的每个HTML字符串创建一个DOM元素,对该元素执行操作,并将转换后的数据发送到新数组中。

const data = [
  [1, "<p>hello</p><img src='blah.jpg'/>"],
  [2, "blah, blah"]
];

const transformedData = data.map(a => {
  const div = document.createElement('div'); // whatever #info is
  div.innerHTML = a[1];

  const images = div.querySelectorAll("img");
  for (var i = 0; i < images.length; ++i) {
    /*Get image path*/
    var tempSrc = images[i].src;
    var imgName = tempSrc.split("/").pop();

    /*Change image path to loading image*/
    images[i].src = "../../resources/media/assets/650x450.png";

    images[i].setAttribute('data-src', tempSrc);
    images[i].setAttribute('data-mobile-src', "/stories/media/images/small-images/" + imgName);
  }

  return [a[0], div.innerHTML];
});

document.getElementById("info").innerHTML = transformedData;
console.log(transformedData);
<div id="info"></div>

答案 1 :(得分:0)

您应该将JSON函数看作

  

JSON.stringify()

  

JSON.parse()来

传递的注释值必须有效。

答案 2 :(得分:0)

如果您现在的字符串看起来像<p>a</p> <p>b</p>,那么只需在p标记上添加一些类,然后将其收集到JSON中。然后,您需要构建p标记文本内容的数组,但此数组必须是字符串。你可以这样做:

let arr = documents.getElementsByClassName('yourClass') 
let strArray = '['
for (let i = 0; i < arr.length - 1; i++) {
   strArray += arr[i].textContent + ', '
} 
strArray += arr[arr.length - 1].textContent
JSON.parse(strArray + ']')

答案 3 :(得分:0)

您的格式无法显式解析为JSON。您必须遍历循环以格式化它或者如果您可以控制您的PHP代码,请在服务器本身中分配javascript变量。您可以定义两个变量

  1. JSON
  2. HTML字符串