Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >将JSON对象格式化输出(breakdown篇)

将JSON对象格式化输出(breakdown篇)

作者头像
用户3579639
发布于 2018-10-19 06:23:22
发布于 2018-10-19 06:23:22
1.9K00
代码可运行
举报
运行总次数:0
代码可运行

上篇提到的prettyjson工具,经我改写之后,可以JavaScript对象格式输出缩进排版的JSON格式。如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var prettyjson = require('prettyjson');

var data = {
  username: 'rafeca',
  url: 'https://github.com/rafeca',
  twitter_account: 'https://twitter.com/rafeca',
  projects: ['prettyprint', 'connfu']};
console.log(prettyjson.render(data, options));

输出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  "username": "rafeca",
  "url": "https://github.com/rafeca",
  "twitter_account": "https://twitter.com/rafeca",
  "projects": [
    "prettyprint",
    "connfu"
  ]
}

我不记得这中间遇到多少坑了。 将JSON对象格式化输出大致的思路是利用递归的方式,将中结果保存到数组,然后一次性输出。 1.判断data是否是对象,如果是则保存(push)'当前缩进空格+{',中间结果和'当前缩进空格+{,',将'当前缩进空格+{,'保存到数组(output)前将当前数组(output)的最后一个元素的末尾逗号删除。

  • 判断中间结果是否是可以直接序列化的,若是,序列化保存到数组(output)
  • 不是则递归下去
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if (typeof data === 'object') {
    /*一开始时当前缩进为0,所以可以输出最外一层对齐的 { 和 } */
    var line = indent(indentation); 
    output.push(line+'{');
    var key;
    var isError = data instanceof Error;
    indentation = indentation + options.defaultIndentation;
    Object.getOwnPropertyNames(data).forEach(function(i) {
      // Prepend the index at the beginning of the line
      key = ('"' + i +'"'+ ': ');
      key = indent(indentation) + key;

      // Skip `undefined`, it's not a valid JSON value.
      if (data[i] === undefined) {
        return;
      }
    /*可以直接序列化的,拼接到"key": 即可,后面仍有逗号*/
      if(isSerializable(data[i])) {
        output.push(key + outputData(data[i]) + ',');
      }else {
        /* 递归,注意render的结果是字符串,开始位置有缩进,
        *  所以拼接到key: 后面时需要trim掉
        */
        var temp = exports.render(data[i], options, indentation);
        output.push(key + temp.trim() + ',');
      }
    });
    removeLastComma(output);
    output.push(line + '},');
}

2.判断是否是数组,如果是则保存(push)'当前缩进空格+[',中间结果和'当前缩进空格+],',将'当前缩进空格+],'保存到数组(output)前将当前数组(output)的最后一个元素的末尾逗号删除。

  • 判断中间结果是否可以直接序列化,若是,则序列化保存到数组(output)
  • 不是则递归下去
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if (Array.isArray(data)) {
    var line = indent(indentation);
    indentation = indentation + options.defaultIndentation;
    output.push(line + '[');
    // If the array is empty
    if (data.length === 0) {
      output.push(indent(indentation) +' ');
    } else {
      data.forEach(function(element) {
        /* 可以直接序列化的情况*/
        if(isSerializable(element)) {
            output.push(indent(indentation) + outputData(element) + ',');
        }else {
           /* 递归 */
           var temp = exports.render(data[i], options, indentation);
           output.push(key + temp.trim() + ',');
        }
      });
      removeLastComma(output);
    }
    output.push(line + '],');
  }

3.辅助函数,判断是否可以直接序列化(boolean, number, string, null)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var isSerializable = function(input, onlyPrimitives) {
    if (typeof input === 'boolean' ||
        typeof input === 'number' || input === null) {
      return true;
    }
    if (typeof input === 'string' && input.indexOf('\n') === -1) {
      return true;
    }

    return false;
  };

4.辅助函数,输出字符和其他类型

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 var outputData = function(input) {

    if (typeof input === 'string') {
      // Print strings wraped by double quote
      return '"' + input + '"';
    }

    if (input === true) {
      return 'true';
    }
    if (input === false) {
      return 'false';
    }
    if (input === null) {
      return '';
    }
    if (typeof input === 'number') {
      return input;
    }

    return input;
  };

5.主函数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
exports.render = function(data, options, indentation) {
  indentation = indentation || 0;
  options = options || {};
  options.defaultIndentation = options.defaultIndentation || 2;

  var output = []; //合并所有中间结果的数组
  removeLastComma(output); //删除最后一个逗号
  // Return all the lines as a string
  return output.join('\n');
}

6.renderstring函数将字符串反序列成对象然后再调用render方法格式化、序列化。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
将JSON对象格式化输出(上篇)
(这后面的内容不用看了) 最近在使用Node.js开发项目,由于JavaScript内置了对JSON的支持,自然而然想到了使用JSON编写配置文件。
用户3579639
2018/10/19
2K0
将JSON对象格式化输出(上篇)
二、JSON数据格式
JSON语法规则 ”名称/值“对的集合。例如对象、字典 { "name": "好人", "job": [1, 2, 3, 4, 5] }字符串必须使用双引号。 值的有序列表。例如数组。 [ 1,2,3 ] JSON的值可以是字符串、数值、布尔值、null、对象、数组。 JSON可以独立成文件,扩展名为json。 JavaScript中的JSON json字符串 数据格式符合JSON格式的要求,类型是字符串 var jsonString = '{"name":"张无忌"}' jso
Dreamy.TZK
2020/08/24
2K0
二、JSON数据格式
第二十二章 : 格式化输出
In this chapter, we continue our look at text related tools, focusing on programs that areused to format text output, rather than changing the text itself. These tools are often usedto prepare text for eventual printing, a subject that we will cover in the next chapter. Theprograms that we will cover in this chapter include:
砖业洋__
2023/05/06
2990
php JSON数据格式化输出方法
php 的json_encode能把数组转换为json格式的字符串。字符串没有缩进,中文会转为unicode编码,例如\u975a\u4ed4。人阅读比较困难。现在这个方法在json_encode的基
joshua317
2018/04/16
3.5K0
python格式化输出dict等集合对象
调试程序的时候,如果需要打印出变量的信息,在python中很容易,一句print即可,他几乎可以打印任何类型的对象,不像PHP中,有一堆echo(),print(),print_r(),var_dump(),让人头疼!
老高的技术博客
2022/12/27
8540
用 Vue.js 实现一个 JSON Viewer
演示地址: http://json.imlht.com/vue-json-viewer-demo.html
仁扬
2023/06/22
3800
Linux 命令(243)—— indent 命令
文章目录 1.命令简介 2.命令格式 3.选项说明 4.常用示例 参考文献 1.命令简介 indent 通过插入或删除空格来改变 C 代码文件的外观。 indent 可以格式化 C 代码文件,以方便程序员阅读、修改等操作。 2.命令格式 indent [options] [input-files] indent [options] [single-input-file] [-o output-file] indent --version 3.选项说明 -bad, --blank-lines-after-de
恋喵大鲤鱼
2023/01/13
7340
JSON.stringify() 方法详解
JSON.stringify() 方法将一个 JavaScript 对象或值转换为 JSON 字符串,如果指定了一个 replacer 函数,则可以选择性地替换值,或者指定的 replacer 是数组,则可选择性地仅包含数组指定的属性。
Power
2025/03/31
1410
Python进行JSON格式化输出
看上去还可以接受吧,但是万一这JSON有一长串串串串串的话……可能编辑器都要hold不住了。 这个时候我们就可以对其进行格式化输出,json.dumps里就有自带的功能参数:
py3study
2020/01/13
5.6K0
JavaScript 对象入门使用JSON
JavaScript对象表示法(JSON)是用于将结构化数据表示为JavaScript对象的标准格式,通常用于在网站上表示和传输数据
acc8226
2022/05/17
1.6K0
Python中JSON的基本使用
JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式。Python3 中可以使用 json 模块来对 JSON 数据进行编解码,它主要提供了四个方法: dumps、dump、loads、load。
py3study
2020/01/06
3.7K0
一起来做一个json格式化工具吧
说到json格式化你肯定很熟悉,毕竟压缩后的json数据基本不可读,为了方便查看,我们可以在编辑器中可以通过插件一键格式化,也可以通过一些在线工具来美化,当然,有时在开发中也会遇到json格式化的需求,有很多开源库或组件能我们解决这个问题,不过并不妨碍我们自己实现一个。
街角小林
2023/07/09
4550
一起来做一个json格式化工具吧
我在近期求职中遇到的前端面试问题及其解法
在今天的文章中,我想跟大家聊聊自己最近在 COVID-19 疫情下的求职经历中遇到的问题。另外,我还把自己的准备工作整理成一份资源清单供大家参考。
深度学习与Python
2020/09/14
1K0
JSON.stringify()和JSON.parse() 的使用总结
如果一个被序列化的对象拥有 toJSON 方法,那么 toJSON 方法后的返回值会被序列化,例如:
用户8921923
2022/10/24
1.5K0
JSON 格式
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。2001年由 Douglas Crockford 提出,目的是取代繁琐笨重的 XML 格式。
bamboo
2019/01/29
2.5K0
JSON 格式
Python 操作json
Json语法规则: 数据在名称/值对中 数据由逗号分隔 花括号保存对象 方括号保存数组 Json字符串本质上是一个字符串,用单引号表示 Json数据的书写格式 名称--值对,包括名称字段(在双引号中),后面跟一个冒号,然后是值: “name”: ”zhangsan” 等价于name = “zhangsan” Json值 值可以是 数字(整数或浮点数) 字符串(双引号括起来) 逻辑值(true或false) 数组(在方括号中) 对象(在花括号中) null Json对象 Json的对象是在大括号中的,
py3study
2020/01/15
1.5K0
php JSON格式化
php 的json_encode能把数组转换为json格式的字符串。字符串没有缩进,中文会转为unicode编码,例如\u975a\u4ed4。人阅读比较困难。现在这个方法在json_encode的基础上再进行一次美化处理。使人能方便阅读内容。
似水的流年
2018/08/01
1.9K0
php JSON数据格式化方法
php 的json_encode它可以转换为一个数组json格字符串类型。字符串不是缩进。中国将被转换unicode编码,例如\u975a\u4ed4。阅读更多困难。今天,这一方法json_encode美化处理。
全栈程序员站长
2021/12/31
1.5K0
大模型部署框架 FastLLM 实现细节解析
以chatglm-6b的支持为例,函数入口在 https://github.com/ztxz16/fastllm/blob/master/src/models/chatglm.cpp#L626 ,这里的 input 就是输入的 context(string类型)。然后 https://github.com/ztxz16/fastllm/blob/master/src/models/chatglm.cpp#L633 这行代码对 input 进行 tokenizer encode并构造好inputIds,再构造好attentionMask之后就可以给Forward函数推理,拿到推理结果之后再使用tokenizer进行decode得到输出。
BBuf
2023/08/22
1.2K0
大模型部署框架 FastLLM 实现细节解析
用 Python 格式化器重新定义用户体验
文章链接:https://cloud.tencent.com/developer/article/2473682
网罗开发
2024/12/13
520
用 Python 格式化器重新定义用户体验
相关推荐
将JSON对象格式化输出(上篇)
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验