首页 文章 精选 留言 我的

精选列表

搜索[HTTP/3],共10000篇文章
优秀的个人博客,低调大师

javascript成神之路(3):到底有没有json对象

前言:在我工作的过程中,很多小伙伴多会说:把字符串转化为JSON对象,把JSON对象转化成字符串等类似的话,前一段时间,我看了一篇关于JSON方面的文章,是一个外国大神写的,让我也深有体会,在这里我就谈一下我的感受。 很多的javascript开发人员都错误地把javascript对象字面量(Object Literals)称为JSON对象(JSON Objects),因为他的语法和JSON规范里描述的一样,但是该规范里也明确地说了JSON只是一个数据交换语言,只有我们将之用在string上下文的时候它才叫JSON。在这里我们在这里了解几个概念: 一、什么是字面量 他们是固定的值,不是变量,让你从“字面上”理解脚本。 字符串字面量是由双引号(")或单引号(')包围起来的零个或多个字符组成的。 对象字面量是由大括号({})括起来的零个或多个对象的属性名-值对。 二、序列化与反序列化 2个程序在交互通信的时候,他们倾向于使用string字符串因为string在很多语言里解析的方式都差不多。复杂的数据结构经常需要用到,并且通过各种各样的中括号{},小括号(),叫括号<>和空格来组成,这个字符串仅仅是按照要求规范好的字符。 为此,我们为了描述这些复杂的数据结构作为一个string字符串,制定了标准的规则和语法。JSON只是其中一种语法,它可以在string上下文里描述对象,数组,字符串,数字,布尔型和null,然后通过程序间传输,并且反序列化成所需要的格式。也是流行的数据交换格式,但是,我们喜欢JSON,谁叫我们是JavaScript开发人员呢! 三、什么时候是JSON,什么时候不是JSON? JSON是设计成描述数据交换格式的,他也有自己的语法, 例如像这样申明{ "prop": "val" } 可能是JavaScript对象字面量也有可能是JSON字符串,取决于什么上下文使用它,如果是用在string上下文(用单引号或双引号引住,或者从text文件读取)的话,那它就是JSON字符串,如果是用在对象字面量上下文中,那它就是对象字面量。如果这样用,这是对象字面量 var bar = { "prop": "val" }; 还需要我们特别注意的是,JSON有非常严格的语法,在string上下文里{ "prop": "val" }是个合法的JSON,但{ prop: "val" }和{ 'prop': 'val' }确实不合法的。所有属性名称和它的值都必须用双引号引住,不能使用单引号。另外,即便你用了转义以后的单引号也是不合法的。 四、放到上下文里来看JSON是何方神圣 可能有人会问,难道JavaScript代码不是一个大的字符串? 当然是,所有的JavaScript代码和HTML(可能还有其他东西)都是字符串,直到浏览器对他们进行解析。这时候.jf文件或者inline的JavaScript代码已经不是字符串了,而是被当成真正的JavaScript源代码了,就像页面里的innterHTML一样,这时候也不是字符串了,而是被解析成DOM结构了。 所以说这一切都是取决于上下文,在string上下文里使用带有大括号的JavaScript对象,那它就是JSON字符串,而如果在对象字面量上下文里使用的话,那它就是对象字面量。如果你对上下文不了解,我后面会具体介绍。 五、真正的JSON对象(看到曙光了吧) 开头已经提到,对象字面量不是JSON对象,但是有真正的JSON对象。但是两者完全不一样概念,在新版的浏览器里JSON对象已经被原生的内置对象了,目前有2个静态方法:JSON.parse用来将JSON字符串反序列化成对象,JSON.stringify用来将对象序列化成JSON字符串。 如果还不理解,参考以下的例子你应该会明白的: // 这是JSON字符串,比如从AJAX获取字符串信息 var my_json_string = '{ "prop": "val" }'; // 将字符串反序列化成对象 var my_obj = JSON.parse( my_json_string ); alert( my_obj.prop == 'val' ); // 提示 true, 和想象的一样! // 将对象序列化成JSON字符串 var my_other_json_string = JSON.stringify( my_obj ); 原文发布时间:2018年01月08日 作者:技术金三胖 本文来源:开源中国如需转载请联系原作者

优秀的个人博客,低调大师

Python3源码—Code对象与pyc文件

8.1. Python程序的执行过程 Python解释器在执行任何一个Python程序文件时,首先进行的动作都是先对文件中的Python源代码进行编译,编译的主要结果是产生一组Python的byte code(字节码),然后将编译的结果交给Python的虚拟机(Virtual Machine),由虚拟机按照顺序一条一条地执行字节码,从而完成对Python程序的执行动作。 对于Python编译器来说,PyCodeObject对象才是其真正的编译结果,而pyc文件只是这个对象在硬盘上的表现形式,它们实际上是Python对源文件编译的结果的两种不同存在方式。 在程序运行期间,编译结果存在于内存的PyCodeObject对象中;而Python结束运行后,编译结果又被保存到了pyc文件中。当下一次运行相同的程序时,Python会根据pyc文件中记

优秀的个人博客,低调大师

Python3源码—字符串(str)对象

5.1. 字符串对象 字符串对象是“变长对象”。 5.1.1. Python中的创建 Python中字符串(strs)对象最重要的创建方法为PyUnicode_DecodeUTF8Stateful,如下Python语句最终会调用到PyUnicode_DecodeUTF8Stateful: a = 'hello b = str('world') 5.1.2. PyUnicode_DecodeUTF8Stateful的C调用栈 词法解析,最终调到PyUnicode_DecodeUTF8Stateful,调用顺序如下: // ast.c ast_for_expr =>ast_for_power =>ast_for_atom_expr =>ast_for_atom (case STRING) =>parsestrplus =&g

优秀的个人博客,低调大师

Python3源码—字符串(bytes)对象

4.1. 字符串对象 字符串对象是“变长对象”。 4.1.1. Python中的创建 Python中字符串(bytes)对象创建最重要的方法为PyBytes_FromStringAndSize,如下Python语句最终会调用到PyBytes_FromStringAndSize: a = b'hello' b = str(b'world') 4.1.2. PyBytes_FromStringAndSize的C调用栈 词法解析,最终调到PyBytes_FromStringAndSize,调用顺序如下: // ast.c ast_for_expr =>ast_for_power =>ast_for_atom_expr =>ast_for_atom (case STRING) =>parsestrplus =>parses

优秀的个人博客,低调大师

干货 | Java中获取类名的3种方法!

获取类名的方法 Java 中获取类名的方式主要有以下三种。 getName() 返回的是虚拟机里面的class的类名表现形式。 getCanonicalName() 返回的是更容易理解的类名表示。 getSimpleName() 返回的是类的简称。 都有什么区别? 通过一个实例来看下它们主要的区别。 public class TestClass { public static void main(String[] args) { // 外部普通类 System.out.println("方法名 类名"); System.out.println("getName " + TestClass.class.getName()); System.out.println("getCanonicalName " + TestClass.class.getCanonicalName()); System.out.println("getSimpleName " + TestClass.class.getSimpleName()); System.out.println(); // 内部类 System.out.println("getName " + TestInnerClass.class.getName()); System.out.println("getCanonicalName " + TestInnerClass.class.getCanonicalName()); System.out.println("getSimpleName " + TestInnerClass.class.getSimpleName()); System.out.println(); // 数组类 TestInnerClass[] testInnerClasses = new TestInnerClass[]{ new TestInnerClass(), new TestInnerClass(), new TestInnerClass() }; System.out.println("getName " + testInnerClasses.getClass().getName()); System.out.println("getCanonicalName " + testInnerClasses.getClass().getCanonicalName()); System.out.println("getSimpleName " + testInnerClasses.getClass().getSimpleName()); System.out.println(); } static class TestInnerClass { } } 程序输出以下结果。 方法名 类名 getName com.test.TestClass getCanonicalName com.test.TestClass getSimpleName TestClass getName com.test.TestClass$TestInnerClass getCanonicalName com.test.TestClass.TestInnerClass getSimpleName TestInnerClass getName [Lcom.test.TestClass$TestInnerClass; getCanonicalName com.test.TestClass.TestInnerClass[] getSimpleName TestInnerClass[] [Lcom.test.TestClass$TestInnerClass;值得说明一下。 这是一种对函数返回值和参数的编码,叫做JNI字段描述符(JavaNative Interface FieldDescriptors)。 [ 表示数组,一个代表一维数组,比如 [[ 代表二维数组。之后 L 代表类描述符,最后;表示类名结束。 结论 1、从以上结果可以看出 getName() 和 getCanonicalName() 在获取普通类名的时候没有区别,在获取内部类和数组类有区别的。 2、getSimpleName() 在获取普通类和内部类名的时候没区别,在获取数组类的时候有区别。 推荐:Spring Boot & Cloud 最强技术教程 扫描关注我们的微信公众号,干货每天更新。 image

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册