Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Third Party CJSON
提交
a1c022fe
T
Third Party CJSON
项目概览
OpenHarmony
/
Third Party CJSON
大约 1 年 前同步成功
通知
6
Star
22
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
Third Party CJSON
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
a1c022fe
编写于
10月 29, 2016
作者:
M
Max Bruckner
提交者:
GitHub
10月 29, 2016
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #37 from DaveGamble/reformatting
Reformat cJSON_Utils.c and test.c
上级
0c23e8dd
ddeca827
变更
5
展开全部
显示空白变更内容
内联
并排
Showing
5 changed file
with
1052 addition
and
476 deletion
+1052
-476
cJSON.c
cJSON.c
+1
-1
cJSON.h
cJSON.h
+5
-5
cJSON_Utils.c
cJSON_Utils.c
+753
-335
cJSON_Utils.h
cJSON_Utils.h
+29
-15
test.c
test.c
+264
-120
未找到文件。
cJSON.c
浏览文件 @
a1c022fe
cJSON.h
浏览文件 @
a1c022fe
cJSON_Utils.c
浏览文件 @
a1c022fe
此差异已折叠。
点击以展开。
cJSON_Utils.h
浏览文件 @
a1c022fe
#include "cJSON.h"
/* Implement RFC6901 (https://tools.ietf.org/html/rfc6901) JSON Pointer spec. */
cJSON
*
cJSONUtils_GetPointer
(
cJSON
*
object
,
const
char
*
pointer
);
cJSON
*
cJSONUtils_GetPointer
(
cJSON
*
object
,
const
char
*
pointer
);
/* Implement RFC6902 (https://tools.ietf.org/html/rfc6902) JSON Patch spec. */
cJSON
*
cJSONUtils_GeneratePatches
(
cJSON
*
from
,
cJSON
*
to
);
void
cJSONUtils_AddPatchToArray
(
cJSON
*
array
,
const
char
*
op
,
const
char
*
path
,
cJSON
*
val
);
/* Utility for generating patch array entries. */
int
cJSONUtils_ApplyPatches
(
cJSON
*
object
,
cJSON
*
patches
);
/* Returns 0 for success. */
cJSON
*
cJSONUtils_GeneratePatches
(
cJSON
*
from
,
cJSON
*
to
);
/* Utility for generating patch array entries. */
void
cJSONUtils_AddPatchToArray
(
cJSON
*
array
,
const
char
*
op
,
const
char
*
path
,
cJSON
*
val
);
/* Returns 0 for success. */
int
cJSONUtils_ApplyPatches
(
cJSON
*
object
,
cJSON
*
patches
);
/*
// Note that ApplyPatches is NOT atomic on failure. To implement an atomic ApplyPatches, use:
//int cJSONUtils_AtomicApplyPatches(cJSON **object, cJSON *patches)
//{
// cJSON *modme=cJSON_Duplicate(*object,1);
// int error=cJSONUtils_ApplyPatches(modme,patches);
// if (!error) {cJSON_Delete(*object);*object=modme;}
// else cJSON_Delete(modme);
// cJSON *modme = cJSON_Duplicate(*object, 1);
// int error = cJSONUtils_ApplyPatches(modme, patches);
// if (!error)
// {
// cJSON_Delete(*object);
// *object = modme;
// }
// else
// {
// cJSON_Delete(modme);
// }
//
// return error;
//}
// Code not added to library since this strategy is a LOT slower.
*/
/* Implement RFC7386 (https://tools.ietf.org/html/rfc7396) JSON Merge Patch spec. */
cJSON
*
cJSONUtils_MergePatch
(
cJSON
*
target
,
cJSON
*
patch
);
/* target will be modified by patch. return value is new ptr for target. */
cJSON
*
cJSONUtils_GenerateMergePatch
(
cJSON
*
from
,
cJSON
*
to
);
/* generates a patch to move from -> to */
/* target will be modified by patch. return value is new ptr for target. */
cJSON
*
cJSONUtils_MergePatch
(
cJSON
*
target
,
cJSON
*
patch
);
/* generates a patch to move from -> to */
cJSON
*
cJSONUtils_GenerateMergePatch
(
cJSON
*
from
,
cJSON
*
to
);
char
*
cJSONUtils_FindPointerFromObjectTo
(
cJSON
*
object
,
cJSON
*
target
);
/* Given a root object and a target object, construct a pointer from one to the other. */
/* Given a root object and a target object, construct a pointer from one to the other. */
char
*
cJSONUtils_FindPointerFromObjectTo
(
cJSON
*
object
,
cJSON
*
target
);
void
cJSONUtils_SortObject
(
cJSON
*
object
);
/* Sorts the members of the object into alphabetical order. */
/* Sorts the members of the object into alphabetical order. */
void
cJSONUtils_SortObject
(
cJSON
*
object
);
test.c
浏览文件 @
a1c022fe
...
...
@@ -27,15 +27,19 @@
/* Parse text to JSON, then render back to text, and print! */
void
doit
(
char
*
text
)
{
char
*
out
;
cJSON
*
json
;
char
*
out
;
cJSON
*
json
;
json
=
cJSON_Parse
(
text
);
if
(
!
json
)
{
printf
(
"Error before: [%s]
\n
"
,
cJSON_GetErrorPtr
());}
json
=
cJSON_Parse
(
text
);
if
(
!
json
)
{
printf
(
"Error before: [%s]
\n
"
,
cJSON_GetErrorPtr
());
}
else
{
out
=
cJSON_Print
(
json
);
out
=
cJSON_Print
(
json
);
cJSON_Delete
(
json
);
printf
(
"%s
\n
"
,
out
);
printf
(
"%s
\n
"
,
out
);
free
(
out
);
}
}
...
...
@@ -43,81 +47,165 @@ void doit(char *text)
/* Read a file, parse, render back, etc. */
void
dofile
(
char
*
filename
)
{
FILE
*
f
;
long
len
;
char
*
data
;
FILE
*
f
;
long
len
;
char
*
data
;
/* open in read binary mode */
f
=
fopen
(
filename
,
"rb"
);
/* get the length */
fseek
(
f
,
0
,
SEEK_END
);
len
=
ftell
(
f
);
fseek
(
f
,
0
,
SEEK_SET
);
data
=
(
char
*
)
malloc
(
len
+
1
);
fread
(
data
,
1
,
len
,
f
);
data
[
len
]
=
'\0'
;
fclose
(
f
);
f
=
fopen
(
filename
,
"rb"
);
fseek
(
f
,
0
,
SEEK_END
);
len
=
ftell
(
f
);
fseek
(
f
,
0
,
SEEK_SET
);
data
=
(
char
*
)
malloc
(
len
+
1
);
fread
(
data
,
1
,
len
,
f
);
data
[
len
]
=
'\0'
;
fclose
(
f
);
doit
(
data
);
free
(
data
);
}
/* Used by some code below as an example datatype. */
struct
record
{
const
char
*
precision
;
double
lat
,
lon
;
const
char
*
address
,
*
city
,
*
state
,
*
zip
,
*
country
;
};
struct
record
{
const
char
*
precision
;
double
lat
;
double
lon
;
const
char
*
address
;
const
char
*
city
;
const
char
*
state
;
const
char
*
zip
;
const
char
*
country
;
};
/* Create a bunch of objects as demonstration. */
void
create_objects
()
{
cJSON
*
root
,
*
fmt
,
*
img
,
*
thm
,
*
fld
;
char
*
out
;
int
i
;
/* declare a few. */
/* declare a few. */
cJSON
*
root
;
cJSON
*
fmt
;
cJSON
*
img
;
cJSON
*
thm
;
cJSON
*
fld
;
char
*
out
;
int
i
;
/* Our "days of the week" array: */
const
char
*
strings
[
7
]
=
{
"Sunday"
,
"Monday"
,
"Tuesday"
,
"Wednesday"
,
"Thursday"
,
"Friday"
,
"Saturday"
};
const
char
*
strings
[
7
]
=
{
"Sunday"
,
"Monday"
,
"Tuesday"
,
"Wednesday"
,
"Thursday"
,
"Friday"
,
"Saturday"
};
/* Our matrix: */
int
numbers
[
3
][
3
]
=
{{
0
,
-
1
,
0
},{
1
,
0
,
0
},{
0
,
0
,
1
}};
int
numbers
[
3
][
3
]
=
{
{
0
,
-
1
,
0
},
{
1
,
0
,
0
},
{
0
,
0
,
1
}
};
/* Our "gallery" item: */
int
ids
[
4
]
=
{
116
,
943
,
234
,
38793
};
int
ids
[
4
]
=
{
116
,
943
,
234
,
38793
};
/* Our array of "records": */
struct
record
fields
[
2
]
=
{
{
"zip"
,
37
.
7668
,
-
1.223959e+2
,
""
,
"SAN FRANCISCO"
,
"CA"
,
"94107"
,
"US"
},
{
"zip"
,
37
.
371991
,
-
1.22026e+2
,
""
,
"SUNNYVALE"
,
"CA"
,
"94085"
,
"US"
}};
struct
record
fields
[
2
]
=
{
{
"zip"
,
37
.
7668
,
-
1.223959e+2
,
""
,
"SAN FRANCISCO"
,
"CA"
,
"94107"
,
"US"
},
{
"zip"
,
37
.
371991
,
-
1.22026e+2
,
""
,
"SUNNYVALE"
,
"CA"
,
"94085"
,
"US"
}
};
volatile
double
zero
=
0
.
0
;
/* Here we construct some JSON standards, from the JSON site. */
/* Our "Video" datatype: */
root
=
cJSON_CreateObject
();
root
=
cJSON_CreateObject
();
cJSON_AddItemToObject
(
root
,
"name"
,
cJSON_CreateString
(
"Jack (
\"
Bee
\"
) Nimble"
));
cJSON_AddItemToObject
(
root
,
"format"
,
fmt
=
cJSON_CreateObject
());
cJSON_AddStringToObject
(
fmt
,
"type"
,
"rect"
);
cJSON_AddNumberToObject
(
fmt
,
"width"
,
1920
);
cJSON_AddNumberToObject
(
fmt
,
"height"
,
1080
);
cJSON_AddFalseToObject
(
fmt
,
"interlace"
);
cJSON_AddNumberToObject
(
fmt
,
"frame rate"
,
24
);
out
=
cJSON_Print
(
root
);
cJSON_Delete
(
root
);
printf
(
"%s
\n
"
,
out
);
free
(
out
);
/* Print to text, Delete the cJSON, print it, release the string. */
cJSON_AddItemToObject
(
root
,
"format"
,
fmt
=
cJSON_CreateObject
());
cJSON_AddStringToObject
(
fmt
,
"type"
,
"rect"
);
cJSON_AddNumberToObject
(
fmt
,
"width"
,
1920
);
cJSON_AddNumberToObject
(
fmt
,
"height"
,
1080
);
cJSON_AddFalseToObject
(
fmt
,
"interlace"
);
cJSON_AddNumberToObject
(
fmt
,
"frame rate"
,
24
);
/* Print to text */
out
=
cJSON_Print
(
root
);
/* Delete the cJSON */
cJSON_Delete
(
root
);
/* print it */
printf
(
"%s
\n
"
,
out
);
/* release the string */
free
(
out
);
/* Our "days of the week" array: */
root
=
cJSON_CreateStringArray
(
strings
,
7
);
root
=
cJSON_CreateStringArray
(
strings
,
7
);
out
=
cJSON_Print
(
root
);
cJSON_Delete
(
root
);
printf
(
"%s
\n
"
,
out
);
free
(
out
);
out
=
cJSON_Print
(
root
);
cJSON_Delete
(
root
);
printf
(
"%s
\n
"
,
out
);
free
(
out
);
/* Our matrix: */
root
=
cJSON_CreateArray
();
for
(
i
=
0
;
i
<
3
;
i
++
)
cJSON_AddItemToArray
(
root
,
cJSON_CreateIntArray
(
numbers
[
i
],
3
));
root
=
cJSON_CreateArray
();
for
(
i
=
0
;
i
<
3
;
i
++
)
{
cJSON_AddItemToArray
(
root
,
cJSON_CreateIntArray
(
numbers
[
i
],
3
));
}
/* cJSON_ReplaceItemInArray(root,1,
cJSON_CreateString("Replacement")); */
/* cJSON_ReplaceItemInArray(root, 1,
cJSON_CreateString("Replacement")); */
out
=
cJSON_Print
(
root
);
cJSON_Delete
(
root
);
printf
(
"%s
\n
"
,
out
);
free
(
out
);
out
=
cJSON_Print
(
root
);
cJSON_Delete
(
root
);
printf
(
"%s
\n
"
,
out
);
free
(
out
);
/* Our "gallery" item: */
root
=
cJSON_CreateObject
();
cJSON_AddItemToObject
(
root
,
"Image"
,
img
=
cJSON_CreateObject
());
cJSON_AddNumberToObject
(
img
,
"Width"
,
800
);
cJSON_AddNumberToObject
(
img
,
"Height"
,
600
);
cJSON_AddStringToObject
(
img
,
"Title"
,
"View from 15th Floor"
);
cJSON_AddItemToObject
(
img
,
"Thumbnail"
,
thm
=
cJSON_CreateObject
());
root
=
cJSON_CreateObject
();
cJSON_AddItemToObject
(
root
,
"Image"
,
img
=
cJSON_CreateObject
());
cJSON_AddNumberToObject
(
img
,
"Width"
,
800
);
cJSON_AddNumberToObject
(
img
,
"Height"
,
600
);
cJSON_AddStringToObject
(
img
,
"Title"
,
"View from 15th Floor"
);
cJSON_AddItemToObject
(
img
,
"Thumbnail"
,
thm
=
cJSON_CreateObject
());
cJSON_AddStringToObject
(
thm
,
"Url"
,
"http:/*www.example.com/image/481989943"
);
cJSON_AddNumberToObject
(
thm
,
"Height"
,
125
);
cJSON_AddStringToObject
(
thm
,
"Width"
,
"100"
);
cJSON_AddItemToObject
(
img
,
"IDs"
,
cJSON_CreateIntArray
(
ids
,
4
));
cJSON_AddNumberToObject
(
thm
,
"Height"
,
125
);
cJSON_AddStringToObject
(
thm
,
"Width"
,
"100"
);
cJSON_AddItemToObject
(
img
,
"IDs"
,
cJSON_CreateIntArray
(
ids
,
4
));
out
=
cJSON_Print
(
root
);
cJSON_Delete
(
root
);
printf
(
"%s
\n
"
,
out
);
free
(
out
);
out
=
cJSON_Print
(
root
);
cJSON_Delete
(
root
);
printf
(
"%s
\n
"
,
out
);
free
(
out
);
/* Our array of "records": */
root
=
cJSON_CreateArray
();
for
(
i
=
0
;
i
<
2
;
i
++
)
root
=
cJSON_CreateArray
();
for
(
i
=
0
;
i
<
2
;
i
++
)
{
cJSON_AddItemToArray
(
root
,
fld
=
cJSON_CreateObject
());
cJSON_AddItemToArray
(
root
,
fld
=
cJSON_CreateObject
());
cJSON_AddStringToObject
(
fld
,
"precision"
,
fields
[
i
].
precision
);
cJSON_AddNumberToObject
(
fld
,
"Latitude"
,
fields
[
i
].
lat
);
cJSON_AddNumberToObject
(
fld
,
"Longitude"
,
fields
[
i
].
lon
);
...
...
@@ -128,24 +216,80 @@ void create_objects()
cJSON_AddStringToObject
(
fld
,
"Country"
,
fields
[
i
].
country
);
}
/* cJSON_ReplaceItemInObject(cJSON_GetArrayItem(root,1),"City",cJSON_CreateIntArray(ids,
4)); */
/* cJSON_ReplaceItemInObject(cJSON_GetArrayItem(root, 1), "City", cJSON_CreateIntArray(ids,
4)); */
out
=
cJSON_Print
(
root
);
cJSON_Delete
(
root
);
printf
(
"%s
\n
"
,
out
);
free
(
out
);
out
=
cJSON_Print
(
root
);
cJSON_Delete
(
root
);
printf
(
"%s
\n
"
,
out
);
free
(
out
);
root
=
cJSON_CreateObject
();
cJSON_AddNumberToObject
(
root
,
"number"
,
1
.
0
/
zero
);
out
=
cJSON_Print
(
root
);
cJSON_Delete
(
root
);
printf
(
"%s
\n
"
,
out
);
free
(
out
);
root
=
cJSON_CreateObject
();
cJSON_AddNumberToObject
(
root
,
"number"
,
1
.
0
/
zero
);
out
=
cJSON_Print
(
root
);
cJSON_Delete
(
root
);
printf
(
"%s
\n
"
,
out
);
free
(
out
);
}
int
main
(
int
argc
,
const
char
*
argv
[])
{
int
main
(
int
argc
,
const
char
*
argv
[])
{
/* a bunch of json: */
char
text1
[]
=
"{
\n\"
name
\"
:
\"
Jack (
\\\"
Bee
\\\"
) Nimble
\"
,
\n\"
format
\"
: {
\"
type
\"
:
\"
rect
\"
,
\n\"
width
\"
: 1920,
\n\"
height
\"
: 1080,
\n\"
interlace
\"
: false,
\"
frame rate
\"
: 24
\n
}
\n
}"
;
char
text2
[]
=
"[
\"
Sunday
\"
,
\"
Monday
\"
,
\"
Tuesday
\"
,
\"
Wednesday
\"
,
\"
Thursday
\"
,
\"
Friday
\"
,
\"
Saturday
\"
]"
;
char
text3
[]
=
"[
\n
[0, -1, 0],
\n
[1, 0, 0],
\n
[0, 0, 1]
\n
]
\n
"
;
char
text4
[]
=
"{
\n
\"
Image
\"
: {
\n
\"
Width
\"
: 800,
\n
\"
Height
\"
: 600,
\n
\"
Title
\"
:
\"
View from 15th Floor
\"
,
\n
\"
Thumbnail
\"
: {
\n
\"
Url
\"
:
\"
http:/*www.example.com/image/481989943
\"
,
\n
\"
Height
\"
: 125,
\n
\"
Width
\"
:
\"
100
\"\n
},
\n
\"
IDs
\"
: [116, 943, 234, 38793]
\n
}
\n
}"
;
char
text5
[]
=
"[
\n
{
\n
\"
precision
\"
:
\"
zip
\"
,
\n
\"
Latitude
\"
: 37.7668,
\n
\"
Longitude
\"
: -122.3959,
\n
\"
Address
\"
:
\"\"
,
\n
\"
City
\"
:
\"
SAN FRANCISCO
\"
,
\n
\"
State
\"
:
\"
CA
\"
,
\n
\"
Zip
\"
:
\"
94107
\"
,
\n
\"
Country
\"
:
\"
US
\"\n
},
\n
{
\n
\"
precision
\"
:
\"
zip
\"
,
\n
\"
Latitude
\"
: 37.371991,
\n
\"
Longitude
\"
: -122.026020,
\n
\"
Address
\"
:
\"\"
,
\n
\"
City
\"
:
\"
SUNNYVALE
\"
,
\n
\"
State
\"
:
\"
CA
\"
,
\n
\"
Zip
\"
:
\"
94085
\"
,
\n
\"
Country
\"
:
\"
US
\"\n
}
\n
]"
;
char
text6
[]
=
"<!DOCTYPE html>"
char
text1
[]
=
"{
\n
"
"
\"
name
\"
:
\"
Jack (
\\\"
Bee
\\\"
) Nimble
\"
,
\n
"
"
\"
format
\"
: {
\"
type
\"
:
\"
rect
\"
,
\n
"
"
\"
width
\"
: 1920,
\n
"
"
\"
height
\"
: 1080,
\n
"
"
\"
interlace
\"
: false,
\"
frame rate
\"
: 24
\n
"
"}
\n
"
"}"
;
char
text2
[]
=
"[
\"
Sunday
\"
,
\"
Monday
\"
,
\"
Tuesday
\"
,
\"
Wednesday
\"
,
\"
Thursday
\"
,
\"
Friday
\"
,
\"
Saturday
\"
]"
;
char
text3
[]
=
"[
\n
"
" [0, -1, 0],
\n
"
" [1, 0, 0],
\n
"
" [0, 0, 1]
\n
"
"
\t
]
\n
"
;
char
text4
[]
=
"{
\n
"
"
\t\t\"
Image
\"
: {
\n
"
"
\t\t\t\"
Width
\"
: 800,
\n
"
"
\t\t\t\"
Height
\"
: 600,
\n
"
"
\t\t\t\"
Title
\"
:
\"
View from 15th Floor
\"
,
\n
"
"
\t\t\t\"
Thumbnail
\"
: {
\n
"
"
\t\t\t\t\"
Url
\"
:
\"
http:/*www.example.com/image/481989943
\"
,
\n
"
"
\t\t\t\t\"
Height
\"
: 125,
\n
"
"
\t\t\t\t\"
Width
\"
:
\"
100
\"\n
"
"
\t\t\t
},
\n
"
"
\t\t\t\"
IDs
\"
: [116, 943, 234, 38793]
\n
"
"
\t\t
}
\n
"
"
\t
}"
;
char
text5
[]
=
"[
\n
"
"
\t
{
\n
"
"
\t
\"
precision
\"
:
\"
zip
\"
,
\n
"
"
\t
\"
Latitude
\"
: 37.7668,
\n
"
"
\t
\"
Longitude
\"
: -122.3959,
\n
"
"
\t
\"
Address
\"
:
\"\"
,
\n
"
"
\t
\"
City
\"
:
\"
SAN FRANCISCO
\"
,
\n
"
"
\t
\"
State
\"
:
\"
CA
\"
,
\n
"
"
\t
\"
Zip
\"
:
\"
94107
\"
,
\n
"
"
\t
\"
Country
\"
:
\"
US
\"\n
"
"
\t
},
\n
"
"
\t
{
\n
"
"
\t
\"
precision
\"
:
\"
zip
\"
,
\n
"
"
\t
\"
Latitude
\"
: 37.371991,
\n
"
"
\t
\"
Longitude
\"
: -122.026020,
\n
"
"
\t
\"
Address
\"
:
\"\"
,
\n
"
"
\t
\"
City
\"
:
\"
SUNNYVALE
\"
,
\n
"
"
\t
\"
State
\"
:
\"
CA
\"
,
\n
"
"
\t
\"
Zip
\"
:
\"
94085
\"
,
\n
"
"
\t
\"
Country
\"
:
\"
US
\"\n
"
"
\t
}
\n
"
"
\t
]"
;
char
text6
[]
=
"<!DOCTYPE html>"
"<html>
\n
"
"<head>
\n
"
" <meta name=
\"
viewport
\"
content=
\"
width=device-width, initial-scale=1
\"
>
\n
"
...
...
@@ -171,12 +315,12 @@ int main (int argc, const char * argv[]) {
doit
(
text6
);
/* Parse standard testfiles: */
/*
dofile("../../tests/test1"); */
/*
dofile("../../tests/test2"); */
/*
dofile("../../tests/test3"); */
/*
dofile("../../tests/test4"); */
/*
dofile("../../tests/test5"); */
/*
dofile("../../tests/test6"); */
/*
dofile("../../tests/test1"); */
/*
dofile("../../tests/test2"); */
/*
dofile("../../tests/test3"); */
/*
dofile("../../tests/test4"); */
/*
dofile("../../tests/test5"); */
/*
dofile("../../tests/test6"); */
/* Now some samplecode for building objects concisely: */
create_objects
();
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录