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

Python类与对象实战:封装、继承、多态的业务落地指南 类与对象是面向对象编程(OOP)的核心概念,其本质并非语法糖,而是组织业务逻辑、应对需求变化的工程范式。通过封装将数据与行为绑定,继承实现逻辑复用与扩展,多态支持运行时灵活替换——三者共同构成可维护、可测试、可演进的系统骨架。在真实电商、库存、报表等生产场景中,合理运用Class and Objects in Python with Examples所体现的设计思想,能显著降低if-else嵌套、避免重复校验、隔离变更影响,并支撑高并发、多租户、灰度发布等复杂需求。本文聚焦Python中类的职责划分、生命周 阅读详情

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

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));

输出:

{
  "username": "rafeca",
  "url": "https://github.com/rafeca",
  "twitter_account": "https://twitter.com/rafeca",
  "projects": [
    "prettyprint",
    "connfu"
  ]
}

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

  • 判断中间结果是否是可以直接序列化的,若是,序列化保存到数组(output)
  • 不是则递归下去
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)
  • 不是则递归下去
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)

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.辅助函数,输出字符和其他类型

 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.主函数

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方法格式化、序列化。

AI智能体工作流:从模糊需求到清晰开发任务的自动化拆解实践 在软件工程领域,需求分析与任务拆解是连接产品构思与技术实现的关键环节,传统依赖人工沟通和文档编写的方式往往效率低下且易失真。其核心原理在于通过结构化方法将非结构化信息转化为可执行指令,这背后离不开大型语言模型(LLM)的语义理解与生成能力。智能体(Agent)作为具备自主推理和工具调用能力的程序单元,为实现这一过程的自动化提供了技术基础。通过将LLM与特定领域的工作流(Workflow)引擎相结合,可以构建出专注于需求翻译与任务规划的AI辅助系统。这类技术的核心价值在于显著提升从想法到原型的转化效率,降低沟 阅读详情

相关推荐

OpenAI API成本优化四大杠杆:请求精简、响应裁剪、缓存控制与智能重试

OpenAI API调用成本并非简单由模型单价决定,而是由输入token、输出token和调用频次共同构成的三维计费结构。其中输入token因系统提示词冗余、JSON序列化开销、用户消息噪声等问题,常含65%-82%无效成分;而输出token则受max_tokens盲目设置、缺乏stop边界和非结构化响应等影响持续膨胀。通过工程化手段对请求体进行语义蒸馏与JSON最小化、对响应实施max_tokens科学设定与response_format结构化约束、构建基于意图哈希的业务层缓存、以及引入带抖动退避与自动降

weixin_30482181的博客 406

JS格式化json并展示

格式化json数据展示区域 <div id="showJsonData" contenteditable="true" style="width:100%;height:300px;border:1px red solid;">测试</div> <#form:textarea path="showJsonData" maxlength="10000" class="f...

HaleyTiger的博客 1万+

Codex零基础实战:15种开箱即用的编程提效玩法

Codex是OpenAI推出的专为代码理解与生成优化的大语言模型,基于GPT-3架构,具备强上下文语义捕获和原生编程语法建模能力。其核心价值在于将自然语言需求直接转化为可执行逻辑,跳过传统API调用、prompt工程与本地部署等复杂环节。在开发者提效、运维自动化、数据处理与跨语言协作等高频场景中,Codex展现出远超规则引擎与静态分析工具的语义泛化能力。本文聚焦‘零基础’用户真实痛点,提供无需配置、不依赖LLM部署经验、开箱即用的15种轻量级实战方案,涵盖JSON处理、Shell日志注入、正则调试、SQL优

weixin_30765577的博客 371

【问答系列】如何对后端返回的json格式化输出并且高亮代码

后端返回的`json`没有格式化,想格式化高亮该`json`并在网页中显示它

商务合作 / 项目定制开发 / 前端一对一培训、答疑 1408

金融新闻实时语义分析系统:构建可交易的结构化信号流水线

金融新闻情感分析不是通用NLP任务,而是面向量化交易决策的语义工程——它需在毫秒级延迟下,精准识别实体、判别事件类型、分级情感强度,并融合多源信号生成可编程的结构化输出。区别于黑盒打分或端到端大模型,真实生产环境依赖规则与轻量模型协同的分层架构,强调金融语境适配与可解释性。本文聚焦实时性(sub-second latency)和金融语境适配两大核心挑战,详解如何将原始新闻转化为带时间戳、实体锚点、强度分级与冲突标记的可交易信号包,支撑个人开发者与中小量化团队落地低延迟、高鲁棒的新闻驱动策略。

aoe41606的博客 542

Anthropic新架构:应用-模型边界层‘蒸发’实录

在大模型工程实践中,‘应用-模型边界层’指代那些长期被SDK封装、却实际由客户端承担的预处理与后处理逻辑,如system prompt注入、streaming分块拼接、tool call JSON解析与校验等。其本质是抽象失当导致的胶水代码泛滥,不仅抬高延迟与内存开销,更阻碍可观测性与精准计费。随着Anthropic推出2024-09-01 API版本,该层通过模型原生支持stop sequence、结构化tool use、原子化streaming及分离input/output tokens等能力,实现责任

weixin_34033624的博客 404

JSON 数据格式化方法

JSON 数据格式化是处理 JSON 数据的重要步骤,有助于提高数据的可读性和可维护性。您可以使用 IDE 或脚本语言提供的内置功能进行格式化,也可以使用在线工具进行格式化。非常推荐 [JSONS](https://www.sojson.com) 不仅支持格式化,而且还支持代码文本对比和替换等功能。

小发菜 3万+

AI驱动项目管理:从LLM语义理解到智能体协同实战

在软件工程领域,项目管理是确保产品按时、高质量交付的核心环节。传统工具主要处理结构化数据,如任务排期和甘特图,但难以理解任务间的语义关联与潜在风险。大型语言模型(LLM)的出现,通过其强大的自然语言理解和生成能力,实现了从信息处理到语义理解的跨越。其技术价值在于能够自动进行智能任务拆解、依赖关系识别和风险评估,将项目经理从繁琐的文档整理和进度跟踪中解放出来。结合AI Agent(智能体)技术,可以构建具备自主规划、工具调用和任务执行能力的虚拟项目管理办公室,实现从需求分析、任务规划到进度监控的自动化闭环。这

weixin_33743880的博客 448

格式化 Json 数据输出

【代码】格式化 Json 数据输出。

三劫散仙 1012

GPT-5.6 Luna降价80%:开发者如何优化API成本与批量处理策略

大语言模型(LLM)API通过提供预训练的自然语言处理能力,已成为现代应用开发的核心组件。其工作原理是基于Transformer架构,通过API接口接收文本输入(prompt),并生成相应的文本输出。这项技术的核心价值在于极大地降低了开发者构建智能应用的门槛,无需从头训练模型即可获得强大的语言理解与生成能力。在应用场景上,LLM API广泛服务于文本摘要、内容生成、代码辅助、对话系统以及数据清洗预处理等领域。近期,随着行业竞争加剧与技术进步,API定价策略成为影响开发者选型与项目成本的关键因素。例如,Ope

weixin_30493401的博客 371

Gemini 3.6 Flash:30分钟构建专属AI创意工具的完整指南

AI工具定制化是当前企业数字化转型的核心需求,其原理在于通过模块化架构将通用AI能力转化为特定场景的专用解决方案。Gemini 3.6 Flash的技术价值体现在大幅降低定制化门槛,个人开发者无需深厚AI背景即可快速构建代码审查助手、设计生成工具等实用应用。该平台采用技能(Skills)与工具(Tools)分离的架构设计,支持工作流可视化配置,显著提升开发效率。在实际应用场景中,开发者可通过组合文本生成、代码分析等基础技能,30分钟内完成从环境配置到原型部署的全流程。本文以代码审查助手为例,详细演示了技能选

weixin_34015336的博客 373

JS格式化JSON数据

b为格式化后的json数据。

qq_25161679的博客 2583

保姆级教程:用SOEM主站搞定汇川SV660N伺服驱动器的EtherCAT通讯(附完整C代码)

本文提供了一份详细的SOEM主站与汇川SV660N伺服驱动器EtherCAT通讯的实战教程,涵盖环境搭建、状态机理解、PDO映射配置、CiA402状态机实战、实时性能优化及诊断调试等关键步骤,并附完整C代码示例,帮助开发者快速实现工业级EtherCAT控制。

weixin_28292761的博客 300

AgentsView usage命令全参考:daily、breakdown、statusline逐个精讲

AgentsView 是一款本地优先(local-first)的编码代理 Token 使用统计工具,可为 Claude Code、Codex 等 20 多种编码代理记录会话、搜索、分析并统计 Token 消耗与费用。本文精讲它最实用的 `agentsview usage` 命令族:`daily` 日报表、`--breakdown` 模型维度下钻、`statusline` 今日花费速览,帮你快速算清

gitblog_01036的博客 399

ROS Navigation global_planner框架解析

ROS Navigation global_planner框架解析主要讲一下我看源码总结的框架,如果大家跟着这个框架看源码的话可能会看的比较快。主要讲解global_planner关键配置参数含义及关键函数Astar,Dijkstra,QuadraticCalculator::calculatePotential,PotentialCalculator::calculatePotential,GridPath::getPath,GradientPath::getPath.

Jeff_Lee_的博客 4693

手把手教你用C语言实现GNSS卫星方位角计算(附RTKLIB风格代码解析)

本文详细介绍了如何使用C语言实现GNSS卫星方位角计算,包括从地固坐标系到站心坐标系的转换链条。通过RTKLIB风格的代码解析,展示了XYZ到ENU坐标转换的核心原理和C语言实现框架,帮助开发者掌握卫星方位角和高度角的计算技巧,适用于GNSS观测数据质量分析和精密定位算法开发。

weixin_30699915的博客 364

GraphQL查询性能分析:Yaak客户端执行时间 breakdown

在API开发中,GraphQL查询性能优化一直是开发者面临的主要挑战。Yaak作为一款功能全面的桌面API客户端(支持REST、GraphQL、WebSocket等多种协议),提供了直观的性能分析工具,帮助开发者定位查询瓶颈。本文将深入解析Yaak客户端中GraphQL查询的执行时间构成,并通过实际案例展示如何利用内置工具进行性能优化。 ## 核心性能指标与监控模块 Yaak的GraphQL性...

gitblog_01168的博客 830

NAT反向代理技术的实现(外网访问内网)

NAT反向代理技术的实现(外网访问内网)(版权所有,引用 请联系作者,注明出处) NAT技术是网络中的重要应用之一。当有一个场景:内网搭建了服务器,需要外网访问时,可以借助NAT映射来实现。如:单位建立了一个Web服务器,我们希望在员工回家之后,依然可以访问到它,那怎么实现呢? 下面的拓扑图,就用来示范这个应用反面场景的实现过程。 一、题目要求: 地址配置如图。使用静态路由: 1、配置右侧交换机2950T,实现单臂路由; 2、配置路由使网络连通; 3、配置NAT访问,实现外网对风网服务器的

joyousmime的博客 8487

UnityDataTools深度解析:如何使用SQLite数据库分析Unity构建内容

UnityDataTools是一款强大的命令行工具,专门用于分析和理解Unity构建输出文件,包括AssetBundles、Player构建和Addressables构建报告。通过将Unity的专有二进制格式转换为SQLite数据库,它为开发者提供了前所未有的构建内容洞察能力,让复杂的Unity构建分析变得简单高效。🎯 ## 为什么需要UnityDataTools? 在Unity开发过程中,

gitblog_00805的博客 449

别再找在线API了!用C#调用微信电脑版自带的OCR,本地识别又快又准

本文详细介绍了如何利用C#调用微信电脑版内置的OCR引擎实现本地文字识别,解决传统云端API的隐私和网络依赖问题。微信OCR具备高精度中文识别、完全离线运行和零成本接入三大优势,特别适合企业文档电子化处理。通过实战代码演示了核心交互逻辑、批量处理流水线和表格数据提取等高级应用场景。

weixin_29295541的博客 588

远程桌面连接失败?手把手教你解决CredSSP加密Oracle漏洞(Win10/Win11通用)

本文详细解析了Windows远程桌面连接因CredSSP加密Oracle漏洞安全更新导致的“身份验证错误”问题。文章从原理入手,提供了通过组策略编辑器(适用于专业版)和注册表编辑器(适用于家庭版)两种核心解决方案,指导用户将安全策略调整为推荐的“缓解”模式,以在保障安全的前提下恢复连接,并给出了高级脚本处理与安全最佳实践。

u6v7w8x的博客 724

模板驱动型文档自动化:非技术人员的智能文档生产方案

文档自动化是企业提升知识复用效率的关键技术,其核心在于将内容结构、样式规则与数据源解耦。相比脚本编写或AI生成,模板驱动方案通过可视化逻辑层(如条件模块、循环区块)、可继承的样式链和语义化容器设计,显著降低使用门槛并保障法律、财务等关键场景的确定性。该技术广泛应用于投标书、合同、产品说明书等批量定制化文档场景,尤其适合市场、法务、咨询等非技术岗位。Sqribble等工具以模板为中枢,实现动态内容填充、一键多格式输出与版本可追溯,让文档从静态交付物升级为可演进的组织知识资产。

diandingyin9417的博客 581

安装Openclaw[本地自动化AI助手]至windows【WSL2模式】系统 Openclaw for Windows

摘要:OpenClaw最佳兼容OpenAI系列模型,推荐使用ChatGPT API(需Auth鉴权),避免K*mi等模型导致的信用卡风险。Windows系统需满足WSL2支持条件(Win11或Win10 1903+版本)。安装需导入自签名根证书或跳过浏览器安全警告,通过离线包部署WSL发行版。使用时通过clawtoken命令获取网关认证令牌,并在浏览器完成设备配对。提供代购ChatGPT Plus账号服务(¥140/月),详细操作指南需加微信群获取文件。(150字)

qq_27246521的博客 455

LangGraph:构建复杂AI工作流的状态图框架与实战指南

在AI应用开发中,工作流编排是连接大语言模型(LLM)与业务逻辑的关键技术。传统线性链式结构在处理分支、循环等复杂逻辑时显得力不从心,而基于图(Graph)的编程模型则提供了更强大的表达能力。LangGraph作为LangChain生态的扩展,通过状态图(StateGraph)将工作流抽象为节点(Node)、边(Edge)和共享状态(State)的组合,实现了声明式的复杂流程编排。其核心价值在于支持多智能体(Agent)协作、循环执行、条件分支等高级模式,并能通过可视化工具直观呈现流程全貌。在工程实践中,L

weixin_34268310的博客 543

基于LUT表对鱼眼图像进行畸变校正

当然也可以进行图像的畸变校正操作,已知相机的焦距为fx/fy,光心为cx/cy,像素大小为p(单位mm/pixel)对于畸变校正结果图中像素点(u,v),其对应的原图中的像素坐标(u',v')的计算流程描述如下。1)假设无畸变相机成像模型的焦距和光心与原相机相同,计算得到无畸变相机成像模型中归一化平面坐标(X,Y,Z),其中X=(u-cx)/fx,Y=(v-cy)/fy,Z=1。这里x'/y'的单位为像素。

On my way 639

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

模板驱动型文档自动化:让结构化内容复用真正落地

文档自动化本质是将重复性内容生产转化为可预测、可复用、可审计的工程实践。其核心在于‘模板驱动’——通过预定义结构、样式与数据绑定逻辑,实现从原始数据到正式交付物(PDF/A、多语言、合规水印)的确定性渲染;区别于AI生成的模糊性与低代码平台的高维护门槛,它以业务语言封装技术逻辑,使市场、HR、咨询等非技术人员能自主维护。关键词直指‘模板驱动’与‘文档自动化’,适用于白皮书、SOP、客户提案、合规报告等强格式、高一致性要求场景。

weixin_34235457的博客 394

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

上一篇: 基于HTML5的网络拓扑图 - 定制状态面板
下一篇: 新手学跨域之Jsonp
formyth
博客等级 码龄17年 9粉丝 94原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值