14514f5e3Sopenharmony_ci/*
24514f5e3Sopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd.
34514f5e3Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
44514f5e3Sopenharmony_ci * you may not use this file except in compliance with the License.
54514f5e3Sopenharmony_ci * You may obtain a copy of the License at
64514f5e3Sopenharmony_ci *
74514f5e3Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
84514f5e3Sopenharmony_ci *
94514f5e3Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
104514f5e3Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
114514f5e3Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
124514f5e3Sopenharmony_ci * See the License for the specific language governing permissions and
134514f5e3Sopenharmony_ci * limitations under the License.
144514f5e3Sopenharmony_ci */
154514f5e3Sopenharmony_ci
164514f5e3Sopenharmony_ci/*
174514f5e3Sopenharmony_ci * @tc.name:jsonparser
184514f5e3Sopenharmony_ci * @tc.desc:test Json.parse
194514f5e3Sopenharmony_ci * @tc.type: FUNC
204514f5e3Sopenharmony_ci * @tc.require: issue#I6BFOC
214514f5e3Sopenharmony_ci */
224514f5e3Sopenharmony_ci
234514f5e3Sopenharmony_cilet json = JSON.parse("[ 1, 2, 3]");
244514f5e3Sopenharmony_ciprint(json);
254514f5e3Sopenharmony_cilet json2 = JSON.parse("[       1       ]");
264514f5e3Sopenharmony_ciprint(json2);
274514f5e3Sopenharmony_cilet json3 = JSON.parse("[              ]");
284514f5e3Sopenharmony_ciprint(json3);
294514f5e3Sopenharmony_cilet data = {
304514f5e3Sopenharmony_ci    "11111111" : "https://www.a.com",
314514f5e3Sopenharmony_ci    "22222222" : "https://www.b.com",
324514f5e3Sopenharmony_ci    "00000000" : "https://www.c.com"
334514f5e3Sopenharmony_ci}
344514f5e3Sopenharmony_cilet strData = JSON.stringify(data);
354514f5e3Sopenharmony_cilet res = JSON.parse(strData);
364514f5e3Sopenharmony_ciprint(res["11111111"]);
374514f5e3Sopenharmony_ciprint(res["22222222"]);
384514f5e3Sopenharmony_ciprint(res["00000000"]);
394514f5e3Sopenharmony_ci
404514f5e3Sopenharmony_civar a = `{"code": 0, "msg": "ok"}`
414514f5e3Sopenharmony_cifunction reviver(k, v) { return v; }
424514f5e3Sopenharmony_civar o = JSON.parse(a, reviver);
434514f5e3Sopenharmony_ciprint(o);
444514f5e3Sopenharmony_ci
454514f5e3Sopenharmony_cilet strData2 = "1.7976971348623157e+308";
464514f5e3Sopenharmony_cilet res2 = JSON.parse(strData2);
474514f5e3Sopenharmony_ciprint(res2);
484514f5e3Sopenharmony_ci
494514f5e3Sopenharmony_cilet strData3 = "-1.7976971348623157e+308";
504514f5e3Sopenharmony_cilet res3 = JSON.parse(strData3);
514514f5e3Sopenharmony_ciprint(res3);
524514f5e3Sopenharmony_ci
534514f5e3Sopenharmony_cilet strData4 = "123";
544514f5e3Sopenharmony_cilet res4 = JSON.parse(strData4);
554514f5e3Sopenharmony_ciprint(res4);
564514f5e3Sopenharmony_ci
574514f5e3Sopenharmony_citry {
584514f5e3Sopenharmony_ci    print(JSON.parse(`{"object": 42, "test":{}`))
594514f5e3Sopenharmony_ci} catch (error) {
604514f5e3Sopenharmony_ci    print(error.name)
614514f5e3Sopenharmony_ci}
624514f5e3Sopenharmony_ci
634514f5e3Sopenharmony_cilet strData5 = "\"\\uDC00\"";
644514f5e3Sopenharmony_cilet res5 = JSON.parse(strData5);
654514f5e3Sopenharmony_ciprint(res5.codePointAt(0))
664514f5e3Sopenharmony_ci
674514f5e3Sopenharmony_cilet strData6 = '{"a": "{\\"width\\": 18}"}'
684514f5e3Sopenharmony_ciprint(JSON.stringify(JSON.parse(strData6)))
694514f5e3Sopenharmony_ci
704514f5e3Sopenharmony_cilet strData7 = '{"a": "{\\"name\\": \\"张三\\"}"}'
714514f5e3Sopenharmony_ciprint(JSON.stringify(JSON.parse(strData7)))
724514f5e3Sopenharmony_ci
734514f5e3Sopenharmony_cilet strData8 = '{"1\\u0000":"name"}'
744514f5e3Sopenharmony_ciprint(JSON.stringify(JSON.parse(strData8)))
754514f5e3Sopenharmony_ci
764514f5e3Sopenharmony_ciprint(JSON.parse('123.456e-789'));
774514f5e3Sopenharmony_ciprint(1 / JSON.parse('-0'));
784514f5e3Sopenharmony_ci
794514f5e3Sopenharmony_ciprint("JSON.parse with backslash")
804514f5e3Sopenharmony_ciprint(JSON.parse('"\\"\\""'));  // utf8 -> utf8
814514f5e3Sopenharmony_ciprint(JSON.parse('"\\u0055\\u0066"'));  // utf8 -> utf8
824514f5e3Sopenharmony_ciprint(JSON.parse('"\\u5555\\u6666"'));  // utf8 -> utf16
834514f5e3Sopenharmony_ciprint(JSON.parse('["\\"\\"","中文"]')[0]);  // utf16 -> utf8
844514f5e3Sopenharmony_ciprint(JSON.parse('["\\u0055\\u0066","中文"]')[0]);  // utf16 -> utf8
854514f5e3Sopenharmony_ciprint(JSON.parse('["\\u5555\\u6666","中文"]')[0]);  // utf16 -> utf16
864514f5e3Sopenharmony_ci
874514f5e3Sopenharmony_ciconst strData9 = `{"k1":"hello","k2":3}`;
884514f5e3Sopenharmony_ciconst strErr = strData9.substring(0, strData9.length - 2);
894514f5e3Sopenharmony_citry {
904514f5e3Sopenharmony_ci    JSON.parse(strErr);
914514f5e3Sopenharmony_ci} catch (err) {
924514f5e3Sopenharmony_ci    print(err.name)
934514f5e3Sopenharmony_ci}
944514f5e3Sopenharmony_ci
954514f5e3Sopenharmony_ciconst strData10 = `{"k1":"hello","k2":                    3}`;
964514f5e3Sopenharmony_ciconst strErr2 = strData10.substring(0, strData10.length - 2);
974514f5e3Sopenharmony_citry {
984514f5e3Sopenharmony_ci    JSON.parse(strErr2);
994514f5e3Sopenharmony_ci} catch (err) {
1004514f5e3Sopenharmony_ci    print(err.name)
1014514f5e3Sopenharmony_ci}
1024514f5e3Sopenharmony_ci
1034514f5e3Sopenharmony_ciconst strData11 = `{"k1":"hello","k2":311111}`;
1044514f5e3Sopenharmony_ciconst strErr3 = strData11.substring(0, strData11.length - 2);
1054514f5e3Sopenharmony_citry {
1064514f5e3Sopenharmony_ci    JSON.parse(strErr3);
1074514f5e3Sopenharmony_ci} catch (err) {
1084514f5e3Sopenharmony_ci    print(err.name)
1094514f5e3Sopenharmony_ci}