javascript - 在第一层创建 JSON 属性键链接

标签 javascript html json

我需要美化一些 JSON 以在 HTML 中显示 <pre>部分。

我使用的工作 JavaScript 代码是..

function transformJson(k, v) {

  if (k === 'href' && typeof v === 'string') {
      var label = v.replace(/&/gi, '&amp;');
    return '<a href=' + v + '>' + label + '</a>';
  }
  return v;
}

function jsonFormat(jsonString) {

   var jsonObj = JSON.parse(jsonString, transformJson);
   return JSON.stringify(jsonObj, undefined, 2)
            .replace(/\s"(\w*)":/g, ' "<span class="key">$1</span>":')
            .replace(/:\s"(.*)"/g, ': "<span class="string">$1</span>"');
};

现在我想将所有属性键设置为第一级,无论属性值如何,都链接到“/documentation#attributeKeyText”

var jsonToPrettify = {
  "href": "link/me",
  "nonHrefButMakeThisKeyALink": "some_text",
  "obj": {
    "href": "link/me",
    "thisKeyWontBeALinkInsteadBecauseHasAParent": "some_text"
  }
}

console.log( jsonFormat( JSON.stringify( jsonToPrettify ) ) );

我怎样才能实现这一目标? 如何检查当前属性没有父对象?

谢谢

更新:

当前版本的输出是:

{
  "<span class="key">href</span>": "<span class="string"><a href=link/me>link/me</a></span>",
  "<span class="key">nonHrefButMakeThisKeyALink</span>": "<span class="string">some_text</span>",
  "<span class="key">obj</span>": {
    "<span class="key">href</span>": "<span class="string"><a href=link/me>link/me</a></span>",
    "<span class="key">thisKeyWontBeALinkInsteadBecauseHasAParent</span>": "<span class="string">some_text</span>"
  }
}

所以我只想将跨度 nonHrefButMakeThisKeyALink 改为链接..

最佳答案

最顶层的对象被传递给 parameter for JSON.parse() 提供的函数在空键下。 您需要将其包含在 transformJson 中:

function transformJson(k, v) {
  if (k === 'href' && typeof v === 'string') {
    var label = v.replace(/&/gi, '&amp;');
    return '<a href=' + v + '>' + label + '</a>';
  } else if (k === '') {
    for (var x in v) {
      //skipping 'href' because it's handled by previous 'if'
      if (x !== 'href' && typeof v[x] === 'string') {
        var label = v[x].replace(/&/gi, '&amp;');
        v[x] = '<a href=/documentation#' +  x  + '>' + label + '</a>';
      }
    }
  }
  return v;
}

关于javascript - 在第一层创建 JSON 属性键链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36629895/

相关文章:

javascript - 以唯一id作为引用删除firebase上的数据

javascript - 重新点击图片缩小

javascript - 过滤组合图库 - 使用 jquery 缓和动画

javascript - 关于 mouseover 和 mouseleave 重复功能?

python - 为什么我在 Django 中的模板标签不起作用?

javascript - Angular JS 在 django 中转换 2 个暗淡的 JSON

c# - 将 Tuple<string,string> 列表输出为 JSON 对象

json - 如何使用 jq 组合两个 json 变量

javascript - 使用正则表达式在 html 中查找 url

javascript - MyQuery 错误地将数组识别为实例