每天推荐一个 GitHub 优质开源项目和一篇精选英文科技或编程文章原文,欢迎关注开源日报。交流QQ群:202790710;电报群 https://t.me/OpeningSourceOrg


今日推荐开源项目:《几分钟初步认识JSON

推荐理由:本文旨在短时间内让读者简单的认识 JSON

JSON 简介

JSON,即 JavaScript Object Notation 的缩写,指的是 JavaScript 的对象表示法,虽然 JSON 使用 JS 语法来描述数据对象,但其本身独立于语言和平台,JSON 的解析器和库都支持不同的编程语言。

与 XML(可扩展标记语言)类似的是,JSON 是纯文本;具有自我描述性,即我们可以简单的理解它;具有层级结构。

JSON 语法

JSON 数据的书写格式是名称/值对,其中包括双引号中的字段名称,后面写一个冒号,然后是值,值可以是整数或浮点数、双引号中的字符串、true or false、方括号中的数组、花括号中的对象;null。例如下面这条

"JSON":"helloworld"

这条语句等价于

JSON = "helloworld"

 

JSON 对象在花括号中书写,其中可以包含多个名称/值对,比如下面这条

{
  "JS":"hello",
  "ON":"world"
}

等价于

JS ="hello", ON ="world"

 

JSON 数组在方括号中书写,其中可以包含多个对象,

{
 "JP":[
    {"JS":"hell", "ON":"wrld"},
    {"JS":"helo", "ON":"wold"},
    {"JS":"hllo", "ON":"word"}
  ]
}

因为 JSON 使用的是 JavaScript 的语法,所以无需额外的软件就能处理JS 中的 JSON,比如这样

var JP = [
  {"JS":"hell", "ON":"wrld"},
  {"JS":"helo", "ON":"wold"},
  {"JS":"hllo", "ON":"word"}
];

如果要访问对象数组,可以像这样进行访问

JP[0].JS

返回的内容是

hell

JavaScript 处理 JSON 数据

JSON 最常见的用法之一,是从 web 服务器上读取 JSON 数据,将 JSON 数据转换为 JavaScript 对象,然后在网页中使用该数据。接下来,我们来讨论 JavaScript 如何处理 JSON 数据。

在 web 页面中用 JavaScript 处理 JSON 数据时,

function handleJson() {
 var Message={"name":"Michael","address":
     {"city":"Beijing","street":"Chaoyang Road","postcode":100025}
 };
 document.write(Message.name);
 document.write(Message.address.city);
}

假定服务器返回的 JSON 数据是上文的:

{
  "name":"Michael",
  "address":{
    "city":"Beijing",
    "street":" Chaoyang Road ",
    "postcode":100025
  }
}

只需将其赋值给一个 JavaScript 变量(例如上文中的 Message),就可以立刻使用该变量并更新页面中的信息了。

这相比起 XML 就显得更加的容易。我们要做的仅仅是将服务器返回的JSON 数据赋给一个 JavaScript 变量即可。

JSON 的数据可移植性问题

JSON 允许 Unicode 行结束符 U + 2028(行分隔符)和 U + 2029(段落分隔符)在引用字符串中显示为非转义,而 JavaScript 不显示。这是JSON 只禁止"控制字符"的结果。为了最大限度地提高可移植性,这些字符应该反斜杠转义。生成 JSONP 时,这个微妙之处非常重要。

更多关于 U+2028/2029 的讨论:

https://github.com/rack/rack-contrib/pull/37

JSON 文档可以用 UTF-8,UTF-16 或 UTF-32 编码,默认编码为 UTF-8(I-JSON 仅支持 UTF-8)。这些编码支持完整的 Unicode 字符集,包括基本多语言面以外的字符(U + 10000至U + 10FFFF)。但是,如果转义,那么这些字符必须使用 UTF-16 代理对(一些 JSON 解析器遗漏的细节)编写。例如,在 JSON 中包含表情符号字符U + 1F602 ?(喜极而泣):

{ "face" : "?" }

//或

{ "face" : "\uD83D\uDE02" }

JSON 中的数字在编程语言中的表示是不可知的。整数和浮点值之间没有区分太清楚:一些可能把42,42.0以及4.2E+1当成是一样的,而其他的可能不会。对于溢出,下溢,精度损失或舍入等问题没有要求。另外,JSON 没有提及有符号零的处理:0.0是否不同于-0.0。使用 IEEE 754浮点标准(包括 JavaScript)的大多数实现都保留带符号的零; 但并不是所有的 JSON 实现都可以这样做。


今日推荐英文原文:《Python Top 10 Open Source Projects (v.Mar 2018)》作者:Mybridge

原文链接:https://medium.mybridge.co/python-top-10-open-source-projects-v-mar-2018-e2ce1d645ec

Python Top 10 Open Source Projects (v.Mar 2018)

For the past month, we ranked nearly 250 Python Open Source Projects to pick the Top 10.

We compared projects with new or major release during this period. Mybridge AI ranks projects based on a variety of factors to measure its quality for professionals.

  • Average number of Github stars in this edition: 570⭐️
  • “Watch” Python Top 10 Open Source on Github and get email once a month.
  • Topics: Datetime, Debugger, Maps, Data validation, Print, Trading Bot, Multidiff, Matrix, Downloder

Open source projects can be useful for programmers. Hope you find an interesting project that inspires you.

Rank 1

Delorean: Delorean: Time Travel Made Easy [V 1.0] [1335 stars on Github]. Courtesy of Mahdi Yusuf


Rank 2

Birdseye: Quick, convenient, expression-centric, graphical Python debugger using the AST [674 stars on Github]. Courtesy of Alex Hall


Rank 3

Som-tsp: Solving the Traveling Salesman Problem using Self-Organizing Maps [432 stars on Github]. Courtesy of Diego Vicente


Rank 4

Voluptuous: Voluptuous, despite the name, is a Python data validation library. [1066 stars on Github]. Courtesy of Alec Thomas


Rank 5

Icecream: Sweet and Creamy Print Debugging [530 stars on Github]. Courtesy of Gruns


Rank 6

Binance-trader: Cryptocurrency Trading Bot for Binance (Experimental) [590 stars on Github]. Courtesy of Yasin


Rank 7

Multidiff: Binary data diffing for multiple objects or streams of data [188 stars on Github]. Courtesy of Juha Kivekäs


Rank 8

Unimatrix: Python script to simulate the display from “The Matrix” in terminal. Uses half-width katakana unicode characters by default, but can use custom character sets. Accepts keyboar… [558 stars on Github]. Courtesy of Will8211


Rank 9

Mypy-protobuf: open source tools to generate mypy stubs from protobufs [33 stars on Github]. Courtesy of Dropbox


Rank 10

Lulu: A friendly you-get fork (⏬ Dumb downloader that scrapes the web) [296 stars on Github].

 


每天推荐一个 GitHub 优质开源项目和一篇精选英文科技或编程文章原文,欢迎关注开源日报。交流QQ群:202790710;电报群 https://t.me/OpeningSourceOrg