What is JSON ?
JSON (JavaScript Object Notation) is a lightweight data-interchange format.
It is easy for humans to read and write.
It is easy for machines to parse and generate.
It is based on a subset of the JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999.
JSON is a text format that is completely language independent but uses conventions that are familiar to programmers.
These properties make JSON an ideal data-interchange language.
You can get more informations on json.org.
{ "name": "Henri Gourvest", /* this is a comment */ "vip": true, "telephones": ["000000000", "111111111111"], "age": 33, "size": 1.83, "adresses": [ { "adress": "blabla", "city": "Metz", "pc": 57000 }, { "adress": "blabla", "city": "Nantes", "pc": 44000 } ] }
Parsing a JSON data structure
var obj: ISuperObject; begin obj := SO('{"foo": true}'); obj := TSuperObject.ParseString('{"foo": true}'); obj := TSuperObject.ParseStream(stream); obj := TSuperObject.ParseFile(FileName); end;
Accessing data
There isn't individual datastructure for each supported data types.
They are all an object: the ISuperObject.
val := obj.AsString; val := obj.AsInteger; val := obj.AsBoolean; val := obj.AsDouble; val := obj.AsArray; val := obj.AsObject; val := obj.AsMethod;
How to read a property value of an object ?
val := obj.AsObject.S['foo']; // get a string val := obj.AsObject.I['foo']; // get an Int64 val := obj.AsObject.B['foo']; // get a Boolean val := obj.AsObject.D['foo']; // get a Double val := obj.AsObject.O['foo']; // get an Object (default) val := obj.AsObject.M['foo']; // get a Method val := obj.AsObject.N['foo']; // get a null object
How to read a value from an array ?
// the advanced way val := obj.AsArray.S[0]; // get a string val := obj.AsArray.I[0]; // get an Int64 val := obj.AsArray.B[0]; // get a Boolean val := obj.AsArray.D[0]; // get a Double val := obj.AsArray.O[0]; // get an Object (default) val := obj.AsArray.M[0]; // get a Method val := obj.AsArray.N[0]; // get a null object
Using paths
Using paths is a very productive method to find an object when you know where is it.
This is some usage cases:
obj['foo']; // get a property obj['123']; // get an item array obj['foo.list']; // get a property from an object obj['foo[123]']; // get an item array from an object obj['foo(1,2,3)']; // call a method obj['foo[]'] := value; // add an item array
you also can encapsulate paths:
obj := so('{"index": 1, "items": ["item 1", "item 2", "item 3"]}'); obj['items[index]'] // return "item 2"
or recreate a new data structure from another:
obj := so('{"index": 1, "items": ["item 1", "item 2", "item 3"]}'); obj['{"item": items[index], "index": index}'] // return {"item": "item 2", "index": 1}
Browsing data structure
Using Delphi enumerator.
Using Delphi enumerator you can browse item's array or property's object value in the same maner.
var item: ISuperObject; begin for item in obj['items'] do ...
you can also browse the keys and values of an object like this:
var item: TSuperAvlEntry; begin for item in obj.AsObject do ... begin item.Name; item.Value; end;
Browsing object properties without enumerator
var item: TSuperObjectIter; begin if ObjectFindFirst(obj, item) then repeat item.key; item.val; until not ObjectFindNext(item); ObjectFindClose(item);
Browsing array items without enumerator
var item: Integer; begin for item := 0 to obj.AsArray.Length - 1 do obj.AsArray[item]
RTTI & marshalling in Delphi 2010
type TData = record str: string; int: Integer; bool: Boolean; flt: Double; end; var ctx: TSuperRttiContext; data: TData; obj: ISuperObject; begin ctx := TSuperRttiContext.Create; try data := ctx.AsType<TData>(SO('{str: "foo", int: 123, bool: true, flt: 1.23}')); obj := ctx.AsJson<TData>(data); finally ctx.Free; end; end;
Saving data
obj.AsJSon(options); obj.SaveTo(stream); obj.SaveTo(filename);
Helpers
SO(['prop1', true, 'prop2', 123]); // return an object {"prop1": true, "prop2": 123} SA([true, 123]); // return an array [true, 123]
Non canonical forms
The SuperObject is able to parse non canonical forms.
// unquoted identifiers SO('{foo: true}'); // unescaped or unquoted strings SO('{собственность: bla bla bla}'); // excadecimal SO('{foo: \xFF}');
相关推荐
在处理JSON数据时,库和框架的使用至关重要,"superobject"就是这样一个专门用于解析JSON的库。 标题中的"superobject_master"可能是指一个开源项目或库的主分支,通常在Git等版本控制系统中,"master"分支代表了...
JSON(JavaScript Object ...通过阅读readme.html,理解并使用superobject.pas和superxmlparser.pas中的函数和类,以及参考demos和tests中的示例,开发者能够熟练地集成和使用SuperObject来实现JSON相关的功能。
除了核心库,`readme.html`文件通常包含了关于如何安装、配置和使用SuperObject的详细说明。`demos`和`tests`目录则分别提供了示例代码和单元测试,这些资源可以帮助开发者快速上手并确保正确地利用库的功能。 总的...
10. `bodids.m`:可能是指基于贝叶斯的物体检测身份识别(Object Detection with Identity Supervision),可能用于跟踪和区分不同物体。 综上所述,这个项目使用贝叶斯方法来解决动态场景中的物体检测问题,通过一...
Delphi中处理JSON数据的关键在于JSON解析库,比如Indy的TIdJSON或SuperObject。这个工具可能提供了一种自动化的方式,将JSON结构映射到Delphi的面向对象模型中,从而简化了从JSON数据创建和填充Delphi对象的过程。在...
基于提供的标签“Delphi XML”,我们可以推测这个解析类可能使用了Delphi内置的XMLDOM或TXMLDocument组件,或者是第三方库如SuperObject、FastXML等。这些组件或库允许开发者通过对象模型来操作XML文档,例如获取、...
1. **基础语法**:变量声明(var, let, const)、数据类型(number, string, boolean, object等)、控制流程(if, for, while)、函数定义与调用。 2. **DOM操作**:使用`document.getElementById`, `querySelector...
至于文件`super-awesome-reddit-machine-master`,这看起来是一个GitHub仓库的克隆,通常包含项目的源代码、配置文件、README文档和其他资源。要深入了解这个项目的工作原理,你需要解压文件并查看源代码,包括`...
XCTAssertTrue([myObject performSomeFunction], @"函数应该返回正确的结果"); } @end ``` 在`README.txt`中,可能会有如下的指导: ``` # 测试指南 1. 打开Xcode项目。 2. 确保已选中你要测试的目标。 3. 在...
# Super Ftp Server and Client for Wall-e # # Sun May 30 2009 # # author: supertiger # # version: 3.0 # ############################################...
2. `DAO`(Data Access Object):用于数据库操作,实现对商品、客户等实体的CRUD(创建、读取、更新、删除)操作。 3. `Model`:业务对象,如商品、订单等实体类。 4. `Service`:业务逻辑层,处理业务规则和事务...
override public function set data(value:Object):void { super.data = value; checkBox.selected = value.isSelected; //假设数据对象有一个isSelected属性 } // 添加事件监听器以处理复选框状态的改变 ...
RMI系统包含三大部分:远程接口(Remote Interface)、远程对象(Remote Object)和 stub 和 skeleton。远程接口定义了可供远程调用的方法,远程对象实现了这些接口,stub是远程对象的代理,用于在网络中传输,而...
- `equals(Object obj)`: 检查此矩形是否等于另一个对象。 - `toString()`: 返回矩形的字符串表示形式。 ### 3. `Rectangle`在GUI中的应用 在Java的AWT和Swing库中,`Rectangle`常用于描述组件的位置和大小。例如,...
这种格式广泛用于Linux和Unix系统,包含了源码文件、文档、配置脚本等所有内容,解压后用户可以按照README或INSTALL文件的指示进行编译和安装。 2. `git.tar` 可能是一个包含Git仓库的压缩文件,可能是easycwmp项目...
var proto = Object.create(Parent.prototype); proto.constructor = Child; Child.prototype = proto; Child.prototype.sayAge = function() { console.log(this.age); }; ``` 4. ES6的类继承 ES6引入了...
super(name); // 调用父类构造函数 this.age = age; } } let child = new Child('child', 5); child.sayName(); // 输出 'child' ``` ### 6. `main.js`文件可能的应用 `main.js`文件很可能包含了关于...
这个压缩包中的`main.js`很可能包含了上述概念的一些实际示例代码,而`README.txt`可能包含了对这些代码的解释或使用指南。为了深入理解,建议查看这两个文件,并尝试运行和修改代码以实践这些概念。
`README.txt`文件可能提供了关于如何运行或理解这些代码的说明,包括如何配置和使用Babel,或者可能包含了一些关于Babel转换过程的额外信息。 总的来说,Babel是JavaScript开发中的重要工具,它使得开发者可以充分...
在JavaScript中,继承是面向对象编程的一个核心概念,它允许一个对象(子对象...`README.txt`文件可能提供了关于如何运行和测试这些代码的说明。掌握这种继承封装技术,将有助于编写更加灵活和可维护的JavaScript代码。