• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2024 Shenzhen Kaihong Digital Industry Development Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  * http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include "cJsonNapiH/cjsonnapi.h"
17 
getAddnumbertoobjTypeOut(napi_env env,napi_value cJSON_AddNumberToObjectOut,cJSON * jsonObj)18 napi_value getAddnumbertoobjTypeOut(napi_env env, napi_value cJSON_AddNumberToObjectOut, cJSON *jsonObj)
19 {
20     napi_status status;
21     const napi_extended_error_info *extended_error_info;
22     const char *tag = "[KH206_cJSON_AddNumberToObject]";
23     napi_value typeOut;
24     /* [NAPI_GEN]: 返回值是int32_t类型时,napi_create_int32 创建一个包含32位整数(int32_t)的js数值(Number)对象
25      * env: 当前环境的句柄
26      * value: 要准换成js数值的int32_t的值,这里以传入1为例,用例新增业务代码时可根据自身需求修改
27      * result: 指向napi_value的指针,这个指针会被设置为新创建的js数值对象
28      */
29     status = napi_create_int32(env, jsonObj == NULL ? 0 : jsonObj->type, &typeOut);
30     if (status != napi_ok) {
31         getErrMessage(status, env, extended_error_info, "napi_create_int32", tag);
32         return nullptr;
33     }
34     /* [NAPI_GEN]: 返回值是对象时,将native侧的对象的属性和值依次塞入napi_create_object创建出的对象,最终将该对象返回js
35      * env: 当前环境的句柄
36      * object: 要设置属性的js对象,该对象是由上文napi_create_object创建的
37      * utf8name: 属性的名称,是一个以UTF-8编码的字符串
38      * value: 与属性名称关联的值,这个值可以是任何js类型(如一个数值、字符串、另一个对象等)
39      */
40     status = napi_set_named_property(env, cJSON_AddNumberToObjectOut, "type", typeOut);
41     if (status != napi_ok) {
42         /* [NAPI_GEN]: 错误处理*/
43         getErrMessage(status, env, extended_error_info, "napi_set_named_property", tag);
44         return nullptr;
45     }
46     return cJSON_AddNumberToObjectOut;
47 }
48 
getAddnumbertoobjValuesintOut(napi_env env,napi_value cJSON_AddNumberToObjectOut,cJSON * jsonObj)49 napi_value getAddnumbertoobjValuesintOut(napi_env env, napi_value cJSON_AddNumberToObjectOut, cJSON *jsonObj)
50 {
51     napi_status status;
52     const napi_extended_error_info *extended_error_info;
53     const char *tag = "[KH206_cJSON_AddNumberToObject]";
54     napi_value valueintOut;
55     /* [NAPI_GEN]: 返回值是int32_t类型时,napi_create_int32 创建一个包含32位整数(int32_t)的js数值(Number)对象
56      * env: 当前环境的句柄
57      * value: 要准换成js数值的int32_t的值,这里以传入1为例,用例新增业务代码时可根据自身需求修改
58      * result: 指向napi_value的指针,这个指针会被设置为新创建的js数值对象
59      */
60     status = napi_create_int32(env, jsonObj == NULL ? 0 : jsonObj->valueint, &valueintOut);
61     if (status != napi_ok) {
62         getErrMessage(status, env, extended_error_info, "napi_create_int32", tag);
63         return nullptr;
64     }
65     /* [NAPI_GEN]: 返回值是对象时,将native侧的对象的属性和值依次塞入napi_create_object创建出的对象,最终将该对象返回js
66      * env: 当前环境的句柄
67      * object: 要设置属性的js对象,该对象是由上文napi_create_object创建的
68      * utf8name: 属性的名称,是一个以UTF-8编码的字符串
69      * value: 与属性名称关联的值,这个值可以是任何js类型(如一个数值、字符串、另一个对象等)
70      */
71     status = napi_set_named_property(env, cJSON_AddNumberToObjectOut, "valueint", valueintOut);
72     if (status != napi_ok) {
73         /* [NAPI_GEN]: 错误处理*/
74         getErrMessage(status, env, extended_error_info, "napi_set_named_property", tag);
75         return nullptr;
76     }
77     return cJSON_AddNumberToObjectOut;
78 }
79 
getAddnumbertoobjValuesdoubleOut(napi_env env,napi_value cJSON_AddNumberToObjectOut,cJSON * jsonObj)80 napi_value getAddnumbertoobjValuesdoubleOut(napi_env env, napi_value cJSON_AddNumberToObjectOut, cJSON *jsonObj)
81 {
82     napi_status status;
83     const napi_extended_error_info *extended_error_info;
84     const char *tag = "[KH206_cJSON_AddNumberToObject]";
85     napi_value valuedoubleOut;
86     /* [NAPI_GEN]: 返回值是double类型时,napi_create_double 创建一个包含双精度浮点数的js数值(Number)对象
87      * env: 当前环境的句柄
88      * value: 要传递给js的双精度浮点数值,这里以传入1.0为例,用例新增业务代码时可根据自身需求修改
89      * result: 指向napi_value的指针,这个指针会被设置为新创建的js数值对象
90      */
91     status = napi_create_double(env, jsonObj == NULL ? 0 : jsonObj->valuedouble, &valuedoubleOut);
92     if (status != napi_ok) {
93         getErrMessage(status, env, extended_error_info, "napi_create_double", tag);
94         return nullptr;
95     }
96     /* [NAPI_GEN]: 返回值是对象时,将native侧的对象的属性和值依次塞入napi_create_object创建出的对象,最终将该对象返回js
97      * env: 当前环境的句柄
98      * object: 要设置属性的js对象,该对象是由上文napi_create_object创建的
99      * utf8name: 属性的名称,是一个以UTF-8编码的字符串
100      * value: 与属性名称关联的值,这个值可以是任何js类型(如一个数值、字符串、另一个对象等)
101      */
102     status = napi_set_named_property(env, cJSON_AddNumberToObjectOut, "valuedouble", valuedoubleOut);
103     if (status != napi_ok) {
104         /* [NAPI_GEN]: 错误处理*/
105         getErrMessage(status, env, extended_error_info, "napi_set_named_property", tag);
106         return nullptr;
107     }
108     return cJSON_AddNumberToObjectOut;
109 }
110 
getAddnumbertoobjValuestringOut(napi_env env,napi_value cJSON_AddNumberToObjectOut,cJSON * jsonOut)111 napi_value getAddnumbertoobjValuestringOut(napi_env env, napi_value cJSON_AddNumberToObjectOut, cJSON *jsonOut)
112 {
113     napi_status status;
114     const napi_extended_error_info *extended_error_info;
115     const char *tag = "[KH206_cJSON_AddNumberToObject]";
116     napi_value valuestringOut;
117     /* [NAPI_GEN]:
118      * 返回值是字符串时,napi_create_string_utf8用于在原生代码中创建一个新的js字符串。这个函数会根据提供的UTF-8编码的字符串创建一个等价的js字符串
119      * env: 当前环境的句柄
120      * str: 指向以null结尾的UTF-8编码的C字符串的指针,这里以valuestring举例,用户可根据需求修改
121      * length:
122      * 字符串的长度,可以是具体的字节数,或者使用特殊的值NAPI_AUTO_LENGTH来让函数自己计算长度(假定字符串以null结尾)
123      * result: 指向napi_value的指针,函数执行成功后这个指针将指向新创建的js字符串
124      */
125     status = napi_create_string_utf8(env, jsonOut->valuestring == nullptr ? "" : jsonOut->valuestring, NAPI_AUTO_LENGTH,
126                                      &valuestringOut);
127     if (status != napi_ok) {
128         /*错误处理*/
129         getErrMessage(status, env, extended_error_info, "napi_create_string_utf8", tag);
130         return nullptr;
131     }
132     /* [NAPI_GEN]: 返回值是对象时,将native侧的对象的属性和值依次塞入napi_create_object创建出的对象,最终将该对象返回js
133      * env: 当前环境的句柄
134      * object: 要设置属性的js对象,该对象是由上文napi_create_object创建的
135      * utf8name: 属性的名称,是一个以UTF-8编码的字符串
136      * value: 与属性名称关联的值,这个值可以是任何js类型(如一个数值、字符串、另一个对象等)
137      */
138     status = napi_set_named_property(env, cJSON_AddNumberToObjectOut, "valuestring", valuestringOut);
139     if (status != napi_ok) {
140         /* [NAPI_GEN]: 错误处理*/
141         getErrMessage(status, env, extended_error_info, "napi_set_named_property", tag);
142         return nullptr;
143     }
144     return cJSON_AddNumberToObjectOut;
145 }
146 
getAddnumbertoobjStringOut(napi_env env,napi_value cJSON_AddNumberToObjectOut,cJSON * jsonOut)147 napi_value getAddnumbertoobjStringOut(napi_env env, napi_value cJSON_AddNumberToObjectOut, cJSON *jsonOut)
148 {
149     napi_status status;
150     const napi_extended_error_info *extended_error_info;
151     const char *tag = "[KH206_cJSON_AddNumberToObject]";
152     napi_value stringOut;
153     /* [NAPI_GEN]:
154      * 返回值是字符串时,napi_create_string_utf8用于在原生代码中创建一个新的js字符串。这个函数会根据提供的UTF-8编码的字符串创建一个等价的js字符串
155      * env: 当前环境的句柄
156      * str: 指向以null结尾的UTF-8编码的C字符串的指针,这里以string举例,用户可根据需求修改
157      * length:
158      * 字符串的长度,可以是具体的字节数,或者使用特殊的值NAPI_AUTO_LENGTH来让函数自己计算长度(假定字符串以null结尾)
159      * result: 指向napi_value的指针,函数执行成功后这个指针将指向新创建的js字符串
160      */
161     status =
162         napi_create_string_utf8(env, jsonOut->string == nullptr ? "" : jsonOut->string, NAPI_AUTO_LENGTH, &stringOut);
163     if (status != napi_ok) {
164         /*错误处理*/
165         getErrMessage(status, env, extended_error_info, "napi_create_string_utf8", tag);
166         return nullptr;
167     }
168     /* [NAPI_GEN]: 返回值是对象时,将native侧的对象的属性和值依次塞入napi_create_object创建出的对象,最终将该对象返回js
169      * env: 当前环境的句柄
170      * object: 要设置属性的js对象,该对象是由上文napi_create_object创建的
171      * utf8name: 属性的名称,是一个以UTF-8编码的字符串
172      * value: 与属性名称关联的值,这个值可以是任何js类型(如一个数值、字符串、另一个对象等)
173      */
174     status = napi_set_named_property(env, cJSON_AddNumberToObjectOut, "string", stringOut);
175     if (status != napi_ok) {
176         /* [NAPI_GEN]: 错误处理*/
177         getErrMessage(status, env, extended_error_info, "napi_set_named_property", tag);
178         return nullptr;
179     }
180     return cJSON_AddNumberToObjectOut;
181 }
182 
getAddnumbertoobjNextOut(napi_env env,napi_value cJSON_AddNumberToObjectOut,cJSON * jsonObj)183 napi_value getAddnumbertoobjNextOut(napi_env env, napi_value cJSON_AddNumberToObjectOut, cJSON *jsonObj)
184 {
185     napi_status status;
186     const napi_extended_error_info *extended_error_info;
187     const char *tag = "[KH206_cJSON_AddNumberToObject]";
188     napi_value nextOut;
189     /* [NAPI_GEN]: 返回值是对象时,需要使用napi_create_object创建一个js的对象与js代码交互
190      * env: 当前环境的句柄
191      * result: 一个napi_value的指针,该指针将被设置为新创建的js对象
192      */
193     status = napi_create_object(env, &nextOut);
194     if (status != napi_ok) {
195         getErrMessage(status, env, extended_error_info, "napi_create_object", tag);
196         return nullptr;
197     }
198     // 给jsonObj->next赋值
199     if (jsonObj == NULL) {
200         return NULL;
201     }
202     if (jsonObj->next != NULL) {
203         nextOut = getAddnumbertoobjTypeOut(env, nextOut, jsonObj->next);
204         nextOut = getAddnumbertoobjValuesdoubleOut(env, nextOut, jsonObj->next);
205         nextOut = getAddnumbertoobjValuesintOut(env, nextOut, jsonObj->next);
206         nextOut = getAddnumbertoobjValuestringOut(env, nextOut, jsonObj->next);
207         nextOut = getAddnumbertoobjStringOut(env, nextOut, jsonObj->next);
208         if (jsonObj->next->next != NULL) {
209             cJSON *nextNext = jsonObj->next->next;
210             if (nextNext != NULL) {
211                 nextOut = getAddnumbertoobjNextOut(env, nextOut, jsonObj->next);
212             }
213         }
214     }
215     /* [NAPI_GEN]: 返回值是对象时,将native侧的对象的属性和值依次塞入napi_create_object创建出的对象,最终将该对象返回js
216      * env: 当前环境的句柄
217      * object: 要设置属性的js对象,该对象是由上文napi_create_object创建的
218      * utf8name: 属性的名称,是一个以UTF-8编码的字符串
219      * value: 与属性名称关联的值,这个值可以是任何js类型(如一个数值、字符串、另一个对象等)
220      */
221     status = napi_set_named_property(env, cJSON_AddNumberToObjectOut, "next", nextOut);
222     if (status != napi_ok) {
223         /* [NAPI_GEN]: 错误处理*/
224         getErrMessage(status, env, extended_error_info, "napi_set_named_property", tag);
225         return nullptr;
226     }
227     return cJSON_AddNumberToObjectOut;
228 }
229 
getJsonobjnumChildout(napi_env env,napi_value childOut,cJSON * jsonObj)230 napi_value getJsonobjnumChildout(napi_env env, napi_value childOut, cJSON *jsonObj)
231 {
232     if (jsonObj->child != NULL) {
233         // 依次返回,直接调用方法?
234         childOut = getAddnumbertoobjTypeOut(env, childOut, jsonObj->child);
235         childOut = getAddnumbertoobjValuesdoubleOut(env, childOut, jsonObj->child);
236         childOut = getAddnumbertoobjValuesintOut(env, childOut, jsonObj->child);
237         childOut = getAddnumbertoobjValuestringOut(env, childOut, jsonObj->child);
238         childOut = getAddnumbertoobjStringOut(env, childOut, jsonObj->child);
239         if (jsonObj->child->next != NULL) {
240             cJSON *childNext = jsonObj->child->next;
241             if (childNext != NULL) {
242                 childOut = getAddnumbertoobjNextOut(env, childOut, jsonObj->child);
243             }
244         }
245     }
246     return childOut;
247 }
248 
getAddnumbertoobjChildOut(napi_env env,napi_value cJSON_AddNumberToObjectOut,cJSON * jsonObj)249 napi_value getAddnumbertoobjChildOut(napi_env env, napi_value cJSON_AddNumberToObjectOut, cJSON *jsonObj)
250 {
251     napi_status status;
252     const napi_extended_error_info *extended_error_info;
253     const char *tag = "[KH206_cJSON_AddNumberToObject]";
254     napi_value childOut;
255     /* [NAPI_GEN]: 返回值是对象时,需要使用napi_create_object创建一个js的对象与js代码交互
256      * env: 当前环境的句柄
257      * result: 一个napi_value的指针,该指针将被设置为新创建的js对象
258      */
259     status = napi_create_object(env, &childOut);
260     if (status != napi_ok) {
261         getErrMessage(status, env, extended_error_info, "napi_create_object", tag);
262         return nullptr;
263     }
264     // 给jsonObj->child赋值
265     if (jsonObj != NULL) {
266         childOut = getJsonobjnumChildout(env, childOut, jsonObj);
267     }
268     /* [NAPI_GEN]: 返回值是对象时,将native侧的对象的属性和值依次塞入napi_create_object创建出的对象,最终将该对象返回js
269      * env: 当前环境的句柄
270      * object: 要设置属性的js对象,该对象是由上文napi_create_object创建的
271      * utf8name: 属性的名称,是一个以UTF-8编码的字符串
272      * value: 与属性名称关联的值,这个值可以是任何js类型(如一个数值、字符串、另一个对象等)
273      */
274     status = napi_set_named_property(env, cJSON_AddNumberToObjectOut, "child", childOut);
275     if (status != napi_ok) {
276         /* [NAPI_GEN]: 错误处理*/
277         getErrMessage(status, env, extended_error_info, "napi_set_named_property", tag);
278         return nullptr;
279     }
280     return cJSON_AddNumberToObjectOut;
281 }
282 
getAddnumbertoobjPrevOut(napi_env env,napi_value cJSON_AddNumberToObjectOut,cJSON * jsonObj)283 napi_value getAddnumbertoobjPrevOut(napi_env env, napi_value cJSON_AddNumberToObjectOut, cJSON *jsonObj)
284 {
285     napi_status status;
286     const napi_extended_error_info *extended_error_info;
287     const char *tag = "[KH206_cJSON_AddNumberToObject]";
288     napi_value prevOut;
289     /* [NAPI_GEN]: 返回值是对象时,需要使用napi_create_object创建一个js的对象与js代码交互
290      * env: 当前环境的句柄
291      * result: 一个napi_value的指针,该指针将被设置为新创建的js对象
292      */
293     status = napi_create_object(env, &prevOut);
294     if (status != napi_ok) {
295         getErrMessage(status, env, extended_error_info, "napi_create_object", tag);
296         return nullptr;
297     }
298     /* [NAPI_GEN]: 返回值是对象时,将native侧的对象的属性和值依次塞入napi_create_object创建出的对象,最终将该对象返回js
299      * env: 当前环境的句柄
300      * object: 要设置属性的js对象,该对象是由上文napi_create_object创建的
301      * utf8name: 属性的名称,是一个以UTF-8编码的字符串
302      * value: 与属性名称关联的值,这个值可以是任何js类型(如一个数值、字符串、另一个对象等)
303      */
304     status = napi_set_named_property(env, cJSON_AddNumberToObjectOut, "prev", prevOut);
305     if (status != napi_ok) {
306         /* [NAPI_GEN]: 错误处理*/
307         getErrMessage(status, env, extended_error_info, "napi_set_named_property", tag);
308         return nullptr;
309     }
310     return cJSON_AddNumberToObjectOut;
311 }
312 
313 
getAddnumbertoobjInfoStr(napi_env env,napi_value propStrValue)314 char *getAddnumbertoobjInfoStr(napi_env env, napi_value propStrValue)
315 {
316     napi_status status;
317     const napi_extended_error_info *extended_error_info;
318     const char *tag = "[KH206_cJSON_AddNumberToObject]";
319     napi_valuetype valuetypename;
320     /* [NAPI_GEN]: 获取入参类型,第1个入参
321      * env: N-API环境的句柄,表示当前的上下文
322      * value: 要检查类型的js值
323      * result: 是一个指针,指向napi_valuetype枚举的值,函数会将结果存储在这里
324      */
325     status = napi_typeof(env, propStrValue, &valuetypename);
326     if (status != napi_ok) {
327         getErrMessage(status, env, extended_error_info, "napi_typeof", tag);
328         return NULL;
329     }
330     size_t strSize1 = 0;
331     /* [NAPI_GEN]: napi_get_value_string_utf8用于将Js字符串转换为UTF-8编码的C字符串
332      * env: N-API环境的句柄,表示当前的上下文
333      * value: 要转换的JavaScript字符串
334      * buf: 用于存储结果的字符数组的指针
335      * bufsize: 缓冲区大小,以字节为单位
336      * result: 转换后的字符串的字节长度(不包括空终止符)。若干buf是NULL,则返回所需的缓冲区大小(包括空终止符)
337      */
338     /* [NAPI_GEN]: buf参数是NULL时,用于获取所需缓冲区大小*/
339     status = napi_get_value_string_utf8(env, propStrValue, NULL, 0, &strSize1);
340     if (status != napi_ok) {
341         getErrMessage(status, env, extended_error_info, "get value string", tag);
342         return NULL;
343     }
344     char *nameIn = new char[strSize1 + 1];
345     /* [NAPI_GEN]: 用于获取字符串*/
346     status = napi_get_value_string_utf8(env, propStrValue, nameIn, strSize1 + 1, &strSize1);
347     if (status != napi_ok) {
348         getErrMessage(status, env, extended_error_info, "get value string", tag);
349         delete[] nameIn;
350         return NULL;
351     }
352     return nameIn;
353 }
354 
getAddnumbertoobjInfoNum(napi_env env,napi_value propNumValue)355 double getAddnumbertoobjInfoNum(napi_env env, napi_value propNumValue)
356 {
357     napi_status status;
358     const napi_extended_error_info *extended_error_info;
359     const char *tag = "[KH206_cJSON_AddNumberToObject]";
360     napi_valuetype valuetypenumber;
361     /* [NAPI_GEN]: 获取入参类型,第2个入参
362      * env: N-API环境的句柄,表示当前的上下文
363      * value: 要检查类型的js值
364      * result: 是一个指针,指向napi_valuetype枚举的值,函数会将结果存储在这里
365      */
366     status = napi_typeof(env, propNumValue, &valuetypenumber);
367     if (status != napi_ok) {
368         getErrMessage(status, env, extended_error_info, "napi_typeof", tag);
369         return NULL;
370     }
371     double numberIn = 0;
372     /* [NAPI_GEN]: napi_get_value_double将一个 napi_value 类型的 js 数值转换成一个 C 语言的 double 类型的数值
373      * env: N-API环境的句柄,表示当前的上下文
374      * value:要转换的JavaScript值
375      * result:指向 double 类型的指针,在这里函数将存储转换后的双精度浮点数
376      */
377     status = napi_get_value_double(env, propNumValue, &numberIn);
378     if (status != napi_ok) {
379         getErrMessage(status, env, extended_error_info, "napi_get_value_double", tag);
380         return NULL;
381     }
382     return numberIn;
383 }
384 
385 /* [NAPI_GEN]:对应cJSON.h中: CJSON_PUBLIC(cJSON*) cJSON_AddNumberToObject(cJSON * const object, const char * const name,
386  * const double number);的napi方法,
387  * 输入:一个cJSON对象,需要添加的item名字(字符串),需要添加的item内容(数值)
388  * 输出:添加item后的cJSON对象
389  */
KH206_cJSON_AddNumberToObject(napi_env env,napi_callback_info info)390 napi_value KH206_cJSON_AddNumberToObject(napi_env env, napi_callback_info info)
391 {
392     napi_status status;
393     /* [NAPI_GEN]: Node.js在其N-API中用来提供错误的扩展信息的结构体,结构体包含以下字段
394      * error_message: 一个指向错误详细字符串的指针,提供了关于错误的文本描述
395      * engin_reserved: 一个保留给Js引擎使用的指针
396      * error_code: 错误码,指示了错误的种类,比如napi_pending_exception表示有一个JavaScript异常未被清理。
397      * engine_error_code:一个引擎特定的错误码,为引擎实现保留,具体含义依赖于使用的JavaScript引擎。
398      * error_message_len:错误消息字符串的长度。
399      */
400     const napi_extended_error_info *extended_error_info;
401     /* [NAPI_GEN]: tag: 日志打印标签*/
402     const char *tag = "[KH206_cJSON_AddNumberToObject]";
403     /* [NAPI_GEN]: get function param in*/
404     /* [NAPI_GEN]: argc:js传入的参数个数 */
405     size_t argc = PARAMS3;
406     /* [NAPI_GEN]: args: 一个数组,保存js传入的参数 */
407     napi_value args[PARAMS3] = {nullptr};
408     /* [NAPI_GEN]: napi_get_cb_info用于获取JS调用该函数时所传递的参数、接收参数的个数以及'this'的值
409      * env: 当前环境的句柄,代表当前的Node.js环境
410      * info: 回调信息句柄,代表当前回调的上下文
411      * argc: 指向size_t的指针,最初应包含可接受的最大参数数量,函数返回时,它将包含实际传递的参数数量
412      * args: 一个足够大的数组,用于接收传递给回调函数的所有js参数。数组的大小应至少与argc传入的值一样大。
413      * this_arg: 如果不是NULL,则返回js回调中this的值
414      * data: 如果不是NULL,则返回与回调函数关联的任何可选数据。通常用于传递在创建函数时指定的静态数据
415      */
416     status = napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
417     if (status != napi_ok) {
418         /* [NAPI_GEN]: 错误处理*/
419         getErrMessage(status, env, extended_error_info, "napi_get_cb_info", tag);
420         return nullptr;
421     }
422     /* [NAPI_GEN]: 从args数组中获取入参 */
423     napi_value propStrValue = args[PARAMS1];
424     char *nameIn = getAddnumbertoobjInfoStr(env, propStrValue);
425     napi_value propNumValue = args[PARAMS2];
426     double numberIn = getAddnumbertoobjInfoNum(env, propNumValue);
427 
428     // Todo: add business logic. 在这前后代码为框架所生成
429     cJSON *jsonObj = cJSON_CreateObject();
430     cJSON *jsonOut = nullptr;
431     // init 传入的obj 初始化
432     napi_value cjsonObj = args[PARAMS0];
433     jsonObj = initCJSON_Object(env, cjsonObj, jsonObj, tag);
434     // add number to jsonObj
435     jsonOut = cJSON_AddNumberToObject(jsonObj, nameIn, numberIn);
436 
437     char *jsonResStr = cJSON_Print(jsonObj);
438     if (jsonResStr != NULL) {
439         std::string jsonResStrPrint = jsonResStr;
440         RemoveNewlines(jsonResStrPrint);
441         OH_LOG_Print(LOG_APP, LOG_INFO, LOG_PRINT_DOMAIN, "KH206_cJSON_AddNumberToObject", "jsonResStr: %s",
442             jsonResStrPrint.c_str());
443     }
444     delete[] nameIn;
445 
446     /* [NAPI_GEN]: function return value*/
447     napi_value cJSON_AddNumberToObjectOut;
448     /* [NAPI_GEN]: 返回值是对象时,需要使用napi_create_object创建一个js的对象与js代码交互
449      * env: 当前环境的句柄
450      * result: 一个napi_value的指针,该指针将被设置为新创建的js对象
451      */
452     status = napi_create_object(env, &cJSON_AddNumberToObjectOut);
453     if (status != napi_ok) {
454         getErrMessage(status, env, extended_error_info, "napi_create_object", tag);
455         return nullptr;
456     }
457 
458     cJSON_AddNumberToObjectOut = getAddnumbertoobjChildOut(env, cJSON_AddNumberToObjectOut, jsonObj);
459     cJSON_AddNumberToObjectOut = getAddnumbertoobjNextOut(env, cJSON_AddNumberToObjectOut, jsonObj);
460     cJSON_AddNumberToObjectOut = getAddnumbertoobjPrevOut(env, cJSON_AddNumberToObjectOut, jsonObj);
461     cJSON_AddNumberToObjectOut = getAddnumbertoobjTypeOut(env, cJSON_AddNumberToObjectOut, jsonObj);
462     cJSON_AddNumberToObjectOut = getAddnumbertoobjValuesdoubleOut(env, cJSON_AddNumberToObjectOut, jsonObj);
463     cJSON_AddNumberToObjectOut = getAddnumbertoobjValuesintOut(env, cJSON_AddNumberToObjectOut, jsonObj);
464     cJSON_AddNumberToObjectOut = getAddnumbertoobjValuestringOut(env, cJSON_AddNumberToObjectOut, jsonObj);
465     cJSON_AddNumberToObjectOut = getAddnumbertoobjStringOut(env, cJSON_AddNumberToObjectOut, jsonObj);
466 
467     cJSON_Delete(jsonObj);
468     return cJSON_AddNumberToObjectOut;
469 }
470