Mercurial > octave
annotate libinterp/corefcn/jsondecode.cc @ 29977:0d67814eb038
jsondecode.cc: New option "makeValidName" to disable string validation.
This cset is part of GSoC 2021. Octave structures are "more powerful"
compared to Matlab. For example, the following works in Octave only
struct ("image/png", "data")
In Matlab the `/` is a prohibited character by `matlab.lang.makeValidName`.
Avoiding any substitutions becomes necessary to preserve the original
key-value-pairs of a JSON structs. One example is to read, process, and write
Jupyter-notebook files.
In Matlab, `matlab.lang.makeValidName` is always applied on the "key" field,
while Octaves' `jsondecode` offers options such as `prefix` and
`ReplacementStyle` to adjust those settings. The new options allows turning
off the whole validation entirely during the JSON decoding process.
* libinterp/corefcn/jsondecode.cc: New option "makeValidName" to disable string
validation.
* test/json/jsondecode_BIST.tst: new test case for new option, fix white space
(tabs).
author | Abdallah Elshamy <abdallah.k.elshamy@gmail.com> |
---|---|
date | Tue, 17 Aug 2021 14:54:29 +0900 |
parents | 7d6709900da7 |
children | c7c69808356f |
rev | line source |
---|---|
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
1 //////////////////////////////////////////////////////////////////////// |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
2 // |
29359
7854d5752dd2
maint: merge stable to default.
John W. Eaton <jwe@octave.org>
parents:
29092
diff
changeset
|
3 // Copyright (C) 2020-2021 The Octave Project Developers |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
4 // |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
5 // See the file COPYRIGHT.md in the top-level directory of this |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
6 // distribution or <https://octave.org/copyright/>. |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
7 // |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
8 // This file is part of Octave. |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
9 // |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
10 // Octave is free software: you can redistribute it and/or modify it |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
11 // under the terms of the GNU General Public License as published by |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
12 // the Free Software Foundation, either version 3 of the License, or |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
13 // (at your option) any later version. |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
14 // |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
15 // Octave is distributed in the hope that it will be useful, but |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
16 // WITHOUT ANY WARRANTY; without even the implied warranty of |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
18 // GNU General Public License for more details. |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
19 // |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
20 // You should have received a copy of the GNU General Public License |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
21 // along with Octave; see the file COPYING. If not, see |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
22 // <https://www.gnu.org/licenses/>. |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
23 // |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
24 //////////////////////////////////////////////////////////////////////// |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
25 |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
26 #if defined (HAVE_CONFIG_H) |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
27 # include "config.h" |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
28 #endif |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
29 |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
30 #include "defun.h" |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
31 #include "error.h" |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
32 #include "errwarn.h" |
29977
0d67814eb038
jsondecode.cc: New option "makeValidName" to disable string validation.
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
29961
diff
changeset
|
33 #include "oct-string.h" |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
34 #include "ovl.h" |
29092
38e22065d9ec
jsondecode.cc: use `octave::make_valid_name` not `matlab.lang.makeValidName` (patch #9998)
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
28801
diff
changeset
|
35 #include "utils.h" |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
36 |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
37 #if defined (HAVE_RAPIDJSON) |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
38 # include <rapidjson/document.h> |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
39 # include <rapidjson/error/en.h> |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
40 #endif |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
41 |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
42 #if defined (HAVE_RAPIDJSON) |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
43 |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
44 octave_value |
29092
38e22065d9ec
jsondecode.cc: use `octave::make_valid_name` not `matlab.lang.makeValidName` (patch #9998)
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
28801
diff
changeset
|
45 decode (const rapidjson::Value& val, |
29977
0d67814eb038
jsondecode.cc: New option "makeValidName" to disable string validation.
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
29961
diff
changeset
|
46 const octave::make_valid_name_options* options); |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
47 |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
48 //! Decodes a numerical JSON value into a scalar number. |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
49 //! |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
50 //! @param val JSON value that is guaranteed to be a numerical value. |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
51 //! |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
52 //! @return @ref octave_value that contains the numerical value of @p val. |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
53 //! |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
54 //! @b Example: |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
55 //! |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
56 //! @code{.cc} |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
57 //! rapidjson::Document d; |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
58 //! d.Parse ("123"); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
59 //! octave_value num = decode_number (d); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
60 //! @endcode |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
61 |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
62 octave_value |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
63 decode_number (const rapidjson::Value& val) |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
64 { |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
65 if (val.IsUint ()) |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
66 return octave_value (val.GetUint ()); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
67 else if (val.IsInt ()) |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
68 return octave_value (val.GetInt ()); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
69 else if (val.IsUint64 ()) |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
70 return octave_value (val.GetUint64 ()); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
71 else if (val.IsInt64 ()) |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
72 return octave_value (val.GetInt64 ()); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
73 else if (val.IsDouble ()) |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
74 return octave_value (val.GetDouble ()); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
75 else |
28750
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28626
diff
changeset
|
76 error ("jsondecode: unidentified type"); |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
77 } |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
78 |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
79 //! Decodes a JSON object into a scalar struct. |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
80 //! |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
81 //! @param val JSON value that is guaranteed to be a JSON object. |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
82 //! @param options @c ReplacementStyle and @c Prefix options with their values. |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
83 //! |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
84 //! @return @ref octave_value that contains the equivalent scalar struct of @p val. |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
85 //! |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
86 //! @b Example: |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
87 //! |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
88 //! @code{.cc} |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
89 //! rapidjson::Document d; |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
90 //! d.Parse ("{\"a\": 1, \"b\": 2}"); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
91 //! octave_value struct = decode_object (d, octave_value_list ()); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
92 //! @endcode |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
93 |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
94 octave_value |
29092
38e22065d9ec
jsondecode.cc: use `octave::make_valid_name` not `matlab.lang.makeValidName` (patch #9998)
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
28801
diff
changeset
|
95 decode_object (const rapidjson::Value& val, |
29977
0d67814eb038
jsondecode.cc: New option "makeValidName" to disable string validation.
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
29961
diff
changeset
|
96 const octave::make_valid_name_options* options) |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
97 { |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
98 octave_scalar_map retval; |
28750
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28626
diff
changeset
|
99 |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
100 for (const auto& pair : val.GetObject ()) |
29092
38e22065d9ec
jsondecode.cc: use `octave::make_valid_name` not `matlab.lang.makeValidName` (patch #9998)
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
28801
diff
changeset
|
101 { |
38e22065d9ec
jsondecode.cc: use `octave::make_valid_name` not `matlab.lang.makeValidName` (patch #9998)
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
28801
diff
changeset
|
102 // Validator function "matlab.lang.makeValidName" to guarantee legitimate |
38e22065d9ec
jsondecode.cc: use `octave::make_valid_name` not `matlab.lang.makeValidName` (patch #9998)
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
28801
diff
changeset
|
103 // variable name. |
38e22065d9ec
jsondecode.cc: use `octave::make_valid_name` not `matlab.lang.makeValidName` (patch #9998)
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
28801
diff
changeset
|
104 std::string varname = pair.name.GetString (); |
29977
0d67814eb038
jsondecode.cc: New option "makeValidName" to disable string validation.
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
29961
diff
changeset
|
105 if (options != nullptr) |
0d67814eb038
jsondecode.cc: New option "makeValidName" to disable string validation.
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
29961
diff
changeset
|
106 octave::make_valid_name (varname, *options); |
29092
38e22065d9ec
jsondecode.cc: use `octave::make_valid_name` not `matlab.lang.makeValidName` (patch #9998)
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
28801
diff
changeset
|
107 retval.assign (varname, decode (pair.value, options)); |
38e22065d9ec
jsondecode.cc: use `octave::make_valid_name` not `matlab.lang.makeValidName` (patch #9998)
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
28801
diff
changeset
|
108 } |
28750
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28626
diff
changeset
|
109 |
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28626
diff
changeset
|
110 return retval; |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
111 } |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
112 |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
113 //! Decodes a JSON array that contains only numerical or null values |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
114 //! into an NDArray. |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
115 //! |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
116 //! @param val JSON value that is guaranteed to be a numeric array. |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
117 //! |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
118 //! @return @ref octave_value that contains the equivalent NDArray of @p val. |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
119 //! |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
120 //! @b Example: |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
121 //! |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
122 //! @code{.cc} |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
123 //! rapidjson::Document d; |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
124 //! d.Parse ("[1, 2, 3, 4]"); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
125 //! octave_value numeric_array = decode_numeric_array (d); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
126 //! @endcode |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
127 |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
128 octave_value |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
129 decode_numeric_array (const rapidjson::Value& val) |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
130 { |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
131 NDArray retval (dim_vector (val.Size (), 1)); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
132 octave_idx_type index = 0; |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
133 for (const auto& elem : val.GetArray ()) |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
134 retval(index++) = elem.IsNull () ? octave_NaN |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
135 : decode_number (elem).double_value (); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
136 return retval; |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
137 } |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
138 |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
139 //! Decodes a JSON array that contains only boolean values into a boolNDArray. |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
140 //! |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
141 //! @param val JSON value that is guaranteed to be a boolean array. |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
142 //! |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
143 //! @return @ref octave_value that contains the equivalent boolNDArray of @p val. |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
144 //! |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
145 //! @b Example: |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
146 //! |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
147 //! @code{.cc} |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
148 //! rapidjson::Document d; |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
149 //! d.Parse ("[true, false, true]"); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
150 //! octave_value boolean_array = decode_boolean_array (d); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
151 //! @endcode |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
152 |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
153 octave_value |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
154 decode_boolean_array (const rapidjson::Value& val) |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
155 { |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
156 boolNDArray retval (dim_vector (val.Size (), 1)); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
157 octave_idx_type index = 0; |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
158 for (const auto& elem : val.GetArray ()) |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
159 retval(index++) = elem.GetBool (); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
160 return retval; |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
161 } |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
162 |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
163 //! Decodes a JSON array that contains different types |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
164 //! or string values only into a Cell. |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
165 //! |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
166 //! @param val JSON value that is guaranteed to be a mixed or string array. |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
167 //! @param options @c ReplacementStyle and @c Prefix options with their values. |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
168 //! |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
169 //! @return @ref octave_value that contains the equivalent Cell of @p val. |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
170 //! |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
171 //! @b Example (decoding a string array): |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
172 //! |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
173 //! @code{.cc} |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
174 //! rapidjson::Document d; |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
175 //! d.Parse ("[\"foo\", \"bar\", \"baz\"]"); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
176 //! octave_value cell = decode_string_and_mixed_array (d, octave_value_list ()); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
177 //! @endcode |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
178 //! |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
179 //! @b Example (decoding a mixed array): |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
180 //! |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
181 //! @code{.cc} |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
182 //! rapidjson::Document d; |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
183 //! d.Parse ("[\"foo\", 123, true]"); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
184 //! octave_value cell = decode_string_and_mixed_array (d, octave_value_list ()); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
185 //! @endcode |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
186 |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
187 octave_value |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
188 decode_string_and_mixed_array (const rapidjson::Value& val, |
29977
0d67814eb038
jsondecode.cc: New option "makeValidName" to disable string validation.
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
29961
diff
changeset
|
189 const octave::make_valid_name_options* options) |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
190 { |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
191 Cell retval (dim_vector (val.Size (), 1)); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
192 octave_idx_type index = 0; |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
193 for (const auto& elem : val.GetArray ()) |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
194 retval(index++) = decode (elem, options); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
195 return retval; |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
196 } |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
197 |
28750
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28626
diff
changeset
|
198 //! Decodes a JSON array that contains only objects into a Cell or struct array |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
199 //! depending on the similarity of the objects' keys. |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
200 //! |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
201 //! @param val JSON value that is guaranteed to be an object array. |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
202 //! @param options @c ReplacementStyle and @c Prefix options with their values. |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
203 //! |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
204 //! @return @ref octave_value that contains the equivalent Cell |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
205 //! or struct array of @p val. |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
206 //! |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
207 //! @b Example (returns a struct array): |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
208 //! |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
209 //! @code{.cc} |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
210 //! rapidjson::Document d; |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
211 //! d.Parse ("[{\"a\":1,\"b\":2},{\"a\":3,\"b\":4}]"); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
212 //! octave_value object_array = decode_object_array (d, octave_value_list ()); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
213 //! @endcode |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
214 //! |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
215 //! @b Example (returns a Cell): |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
216 //! |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
217 //! @code{.cc} |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
218 //! rapidjson::Document d; |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
219 //! d.Parse ("[{\"a\":1,\"b\":2},{\"b\":3,\"a\":4}]"); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
220 //! octave_value object_array = decode_object_array (d, octave_value_list ()); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
221 //! @endcode |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
222 |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
223 octave_value |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
224 decode_object_array (const rapidjson::Value& val, |
29977
0d67814eb038
jsondecode.cc: New option "makeValidName" to disable string validation.
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
29961
diff
changeset
|
225 const octave::make_valid_name_options* options) |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
226 { |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
227 Cell struct_cell = decode_string_and_mixed_array (val, options).cell_value (); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
228 string_vector field_names = struct_cell(0).scalar_map_value ().fieldnames (); |
28750
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28626
diff
changeset
|
229 |
28625
173807014259
jsondecode.cc: Prefer STL to custom comparison function
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
28624
diff
changeset
|
230 bool same_field_names = true; |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
231 for (octave_idx_type i = 1; i < struct_cell.numel (); ++i) |
28625
173807014259
jsondecode.cc: Prefer STL to custom comparison function
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
28624
diff
changeset
|
232 if (field_names.std_list () |
173807014259
jsondecode.cc: Prefer STL to custom comparison function
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
28624
diff
changeset
|
233 != struct_cell(i).scalar_map_value ().fieldnames ().std_list ()) |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
234 { |
28750
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28626
diff
changeset
|
235 same_field_names = false; |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
236 break; |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
237 } |
28750
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28626
diff
changeset
|
238 |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
239 if (same_field_names) |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
240 { |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
241 octave_map struct_array; |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
242 Cell value (dim_vector (struct_cell.numel (), 1)); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
243 for (octave_idx_type i = 0; i < field_names.numel (); ++i) |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
244 { |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
245 for (octave_idx_type k = 0; k < struct_cell.numel (); ++k) |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
246 value(k) = struct_cell(k).scalar_map_value ().getfield (field_names(i)); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
247 struct_array.assign (field_names(i), value); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
248 } |
28750
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28626
diff
changeset
|
249 return struct_array; |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
250 } |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
251 else |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
252 return struct_cell; |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
253 } |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
254 |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
255 //! Decodes a JSON array that contains only arrays into a Cell or an NDArray |
28750
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28626
diff
changeset
|
256 //! depending on the dimensions and element types of the sub-arrays. |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
257 //! |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
258 //! @param val JSON value that is guaranteed to be an array of arrays. |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
259 //! @param options @c ReplacementStyle and @c Prefix options with their values. |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
260 //! |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
261 //! @return @ref octave_value that contains the equivalent Cell |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
262 //! or NDArray of @p val. |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
263 //! |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
264 //! @b Example (returns an NDArray): |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
265 //! |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
266 //! @code{.cc} |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
267 //! rapidjson::Document d; |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
268 //! d.Parse ("[[1, 2], [3, 4]]"); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
269 //! octave_value array = decode_array_of_arrays (d, octave_value_list ()); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
270 //! @endcode |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
271 //! |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
272 //! @b Example (returns a Cell): |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
273 //! |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
274 //! @code{.cc} |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
275 //! rapidjson::Document d; |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
276 //! d.Parse ("[[1, 2], [3, 4, 5]]"); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
277 //! octave_value cell = decode_array_of_arrays (d, octave_value_list ()); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
278 //! @endcode |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
279 |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
280 octave_value |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
281 decode_array_of_arrays (const rapidjson::Value& val, |
29977
0d67814eb038
jsondecode.cc: New option "makeValidName" to disable string validation.
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
29961
diff
changeset
|
282 const octave::make_valid_name_options* options) |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
283 { |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
284 // Some arrays should be decoded as NDArrays and others as cell arrays |
28750
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28626
diff
changeset
|
285 Cell cell = decode_string_and_mixed_array (val, options).cell_value (); |
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28626
diff
changeset
|
286 |
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28626
diff
changeset
|
287 // Only arrays with sub-arrays of booleans and numericals will return NDArray |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
288 bool is_bool = cell(0).is_bool_matrix (); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
289 dim_vector sub_array_dims = cell(0).dims (); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
290 octave_idx_type sub_array_ndims = cell(0).ndims (); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
291 octave_idx_type cell_numel = cell.numel (); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
292 for (octave_idx_type i = 0; i < cell_numel; ++i) |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
293 { |
28750
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28626
diff
changeset
|
294 // If one element is cell return the cell array as at least one of the |
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28626
diff
changeset
|
295 // sub-arrays area either an array of: strings, objects or mixed array |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
296 if (cell(i).iscell ()) |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
297 return cell; |
28750
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28626
diff
changeset
|
298 // If not the same dim of elements or dim = 0, return cell array |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
299 if (cell(i).dims () != sub_array_dims || sub_array_dims == dim_vector ()) |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
300 return cell; |
28750
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28626
diff
changeset
|
301 // If not numeric sub-arrays only or bool sub-arrays only, |
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28626
diff
changeset
|
302 // return cell array |
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28626
diff
changeset
|
303 if (cell(i).is_bool_matrix () != is_bool) |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
304 return cell; |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
305 } |
28750
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28626
diff
changeset
|
306 |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
307 // Calculate the dims of the output array |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
308 dim_vector array_dims; |
28801
ffa6c50c2eaa
Decode JSON boolean arrays into logical arrays (bug #59135).
Abdallah-Elshamy <abdallah.k.elshamy@gmail.com>
parents:
28761
diff
changeset
|
309 array_dims.resize (sub_array_ndims + 1); |
ffa6c50c2eaa
Decode JSON boolean arrays into logical arrays (bug #59135).
Abdallah-Elshamy <abdallah.k.elshamy@gmail.com>
parents:
28761
diff
changeset
|
310 array_dims(0) = cell_numel; |
ffa6c50c2eaa
Decode JSON boolean arrays into logical arrays (bug #59135).
Abdallah-Elshamy <abdallah.k.elshamy@gmail.com>
parents:
28761
diff
changeset
|
311 for (auto i = 1; i < sub_array_ndims + 1; i++) |
ffa6c50c2eaa
Decode JSON boolean arrays into logical arrays (bug #59135).
Abdallah-Elshamy <abdallah.k.elshamy@gmail.com>
parents:
28761
diff
changeset
|
312 array_dims(i) = sub_array_dims(i-1); |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
313 NDArray array (array_dims); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
314 |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
315 // Populate the array with specific order to generate MATLAB-identical output |
29708
fbcc3a680826
Improve performance (> 100X) of jsondecode (bug #60625).
Rik <rik@octave.org>
parents:
29359
diff
changeset
|
316 octave_idx_type sub_array_numel = array.numel () / cell_numel; |
fbcc3a680826
Improve performance (> 100X) of jsondecode (bug #60625).
Rik <rik@octave.org>
parents:
29359
diff
changeset
|
317 for (octave_idx_type k = 0; k < cell_numel; ++k) |
fbcc3a680826
Improve performance (> 100X) of jsondecode (bug #60625).
Rik <rik@octave.org>
parents:
29359
diff
changeset
|
318 { |
fbcc3a680826
Improve performance (> 100X) of jsondecode (bug #60625).
Rik <rik@octave.org>
parents:
29359
diff
changeset
|
319 NDArray sub_array_value = cell(k).array_value (); |
fbcc3a680826
Improve performance (> 100X) of jsondecode (bug #60625).
Rik <rik@octave.org>
parents:
29359
diff
changeset
|
320 for (octave_idx_type i = 0; i < sub_array_numel; ++i) |
fbcc3a680826
Improve performance (> 100X) of jsondecode (bug #60625).
Rik <rik@octave.org>
parents:
29359
diff
changeset
|
321 array(k + i*cell_numel) = sub_array_value(i); |
fbcc3a680826
Improve performance (> 100X) of jsondecode (bug #60625).
Rik <rik@octave.org>
parents:
29359
diff
changeset
|
322 } |
28801
ffa6c50c2eaa
Decode JSON boolean arrays into logical arrays (bug #59135).
Abdallah-Elshamy <abdallah.k.elshamy@gmail.com>
parents:
28761
diff
changeset
|
323 |
ffa6c50c2eaa
Decode JSON boolean arrays into logical arrays (bug #59135).
Abdallah-Elshamy <abdallah.k.elshamy@gmail.com>
parents:
28761
diff
changeset
|
324 if (is_bool) |
ffa6c50c2eaa
Decode JSON boolean arrays into logical arrays (bug #59135).
Abdallah-Elshamy <abdallah.k.elshamy@gmail.com>
parents:
28761
diff
changeset
|
325 return boolNDArray (array); |
ffa6c50c2eaa
Decode JSON boolean arrays into logical arrays (bug #59135).
Abdallah-Elshamy <abdallah.k.elshamy@gmail.com>
parents:
28761
diff
changeset
|
326 else |
ffa6c50c2eaa
Decode JSON boolean arrays into logical arrays (bug #59135).
Abdallah-Elshamy <abdallah.k.elshamy@gmail.com>
parents:
28761
diff
changeset
|
327 return array; |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
328 } |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
329 |
28750
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28626
diff
changeset
|
330 //! Decodes any type of JSON arrays. This function only serves as an interface |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
331 //! by choosing which function to call from the previous functions. |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
332 //! |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
333 //! @param val JSON value that is guaranteed to be an array. |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
334 //! @param options @c ReplacementStyle and @c Prefix options with their values. |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
335 //! |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
336 //! @return @ref octave_value that contains the output of decoding @p val. |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
337 //! |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
338 //! @b Example: |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
339 //! |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
340 //! @code{.cc} |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
341 //! rapidjson::Document d; |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
342 //! d.Parse ("[[1, 2], [3, 4, 5]]"); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
343 //! octave_value array = decode_array (d, octave_value_list ()); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
344 //! @endcode |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
345 |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
346 octave_value |
29092
38e22065d9ec
jsondecode.cc: use `octave::make_valid_name` not `matlab.lang.makeValidName` (patch #9998)
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
28801
diff
changeset
|
347 decode_array (const rapidjson::Value& val, |
29977
0d67814eb038
jsondecode.cc: New option "makeValidName" to disable string validation.
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
29961
diff
changeset
|
348 const octave::make_valid_name_options* options) |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
349 { |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
350 // Handle empty arrays |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
351 if (val.Empty ()) |
28750
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28626
diff
changeset
|
352 return NDArray (); |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
353 |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
354 // Compare with other elements to know if the array has multiple types |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
355 rapidjson::Type array_type = val[0].GetType (); |
28750
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28626
diff
changeset
|
356 // Check if the array is numeric and if it has multiple types |
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28626
diff
changeset
|
357 bool same_type = true; |
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28626
diff
changeset
|
358 bool is_numeric = true; |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
359 for (const auto& elem : val.GetArray ()) |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
360 { |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
361 rapidjson::Type current_elem_type = elem.GetType (); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
362 if (is_numeric && ! (current_elem_type == rapidjson::kNullType |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
363 || current_elem_type == rapidjson::kNumberType)) |
28750
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28626
diff
changeset
|
364 is_numeric = false; |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
365 if (same_type && (current_elem_type != array_type)) |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
366 // RapidJSON doesn't have kBoolean Type it has kTrueType and kFalseType |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
367 if (! ((current_elem_type == rapidjson::kTrueType |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
368 && array_type == rapidjson::kFalseType) |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
369 || (current_elem_type == rapidjson::kFalseType |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
370 && array_type == rapidjson::kTrueType))) |
28750
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28626
diff
changeset
|
371 same_type = false; |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
372 } |
28750
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28626
diff
changeset
|
373 |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
374 if (is_numeric) |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
375 return decode_numeric_array (val); |
28750
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28626
diff
changeset
|
376 |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
377 if (same_type && (array_type != rapidjson::kStringType)) |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
378 { |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
379 if (array_type == rapidjson::kTrueType |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
380 || array_type == rapidjson::kFalseType) |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
381 return decode_boolean_array (val); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
382 else if (array_type == rapidjson::kObjectType) |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
383 return decode_object_array (val, options); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
384 else if (array_type == rapidjson::kArrayType) |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
385 return decode_array_of_arrays (val, options); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
386 else |
28750
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28626
diff
changeset
|
387 error ("jsondecode: unidentified type"); |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
388 } |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
389 else |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
390 return decode_string_and_mixed_array (val, options); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
391 } |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
392 |
28750
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28626
diff
changeset
|
393 //! Decodes any JSON value. This function only serves as an interface |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
394 //! by choosing which function to call from the previous functions. |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
395 //! |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
396 //! @param val JSON value. |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
397 //! @param options @c ReplacementStyle and @c Prefix options with their values. |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
398 //! |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
399 //! @return @ref octave_value that contains the output of decoding @p val. |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
400 //! |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
401 //! @b Example: |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
402 //! |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
403 //! @code{.cc} |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
404 //! rapidjson::Document d; |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
405 //! d.Parse ("[{\"a\":1,\"b\":2},{\"b\":3,\"a\":4}]"); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
406 //! octave_value value = decode (d, octave_value_list ()); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
407 //! @endcode |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
408 |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
409 octave_value |
29092
38e22065d9ec
jsondecode.cc: use `octave::make_valid_name` not `matlab.lang.makeValidName` (patch #9998)
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
28801
diff
changeset
|
410 decode (const rapidjson::Value& val, |
29977
0d67814eb038
jsondecode.cc: New option "makeValidName" to disable string validation.
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
29961
diff
changeset
|
411 const octave::make_valid_name_options* options) |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
412 { |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
413 if (val.IsBool ()) |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
414 return val.GetBool (); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
415 else if (val.IsNumber ()) |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
416 return decode_number (val); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
417 else if (val.IsString ()) |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
418 return val.GetString (); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
419 else if (val.IsObject ()) |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
420 return decode_object (val, options); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
421 else if (val.IsNull ()) |
28750
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28626
diff
changeset
|
422 return NDArray (); |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
423 else if (val.IsArray ()) |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
424 return decode_array (val, options); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
425 else |
28750
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28626
diff
changeset
|
426 error ("jsondecode: unidentified type"); |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
427 } |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
428 |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
429 #endif |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
430 |
29958
32c3a5805893
move DEFUN and DEFMETHOD functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
29708
diff
changeset
|
431 OCTAVE_NAMESPACE_BEGIN |
32c3a5805893
move DEFUN and DEFMETHOD functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
29708
diff
changeset
|
432 |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
433 DEFUN (jsondecode, args, , |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
434 doc: /* -*- texinfo -*- |
28750
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28626
diff
changeset
|
435 @deftypefn {} {@var{object} =} jsondecode (@var{JSON_txt}) |
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28626
diff
changeset
|
436 @deftypefnx {} {@var{object} =} jsondecode (@dots{}, "ReplacementStyle", @var{rs}) |
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28626
diff
changeset
|
437 @deftypefnx {} {@var{object} =} jsondecode (@dots{}, "Prefix", @var{pfx}) |
29977
0d67814eb038
jsondecode.cc: New option "makeValidName" to disable string validation.
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
29961
diff
changeset
|
438 @deftypefnx {} {@var{object} =} jsondecode (@dots{}, "makeValidName", @var{TF}) |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
439 |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
440 Decode text that is formatted in JSON. |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
441 |
28750
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28626
diff
changeset
|
442 The input @var{JSON_txt} is a string that contains JSON text. |
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28626
diff
changeset
|
443 |
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28626
diff
changeset
|
444 The output @var{object} is an Octave object that contains the result of |
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28626
diff
changeset
|
445 decoding @var{JSON_txt}. |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
446 |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
447 For more information about the options @qcode{"ReplacementStyle"} and |
28626
34696240591e
doc: Improve JSON documentation.
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
28625
diff
changeset
|
448 @qcode{"Prefix"}, see |
34696240591e
doc: Improve JSON documentation.
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
28625
diff
changeset
|
449 @ref{XREFmatlab_lang_makeValidName,,matlab.lang.makeValidName}. |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
450 |
29977
0d67814eb038
jsondecode.cc: New option "makeValidName" to disable string validation.
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
29961
diff
changeset
|
451 If the value of the option @qcode{\"makeValidName\"} is false then names |
0d67814eb038
jsondecode.cc: New option "makeValidName" to disable string validation.
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
29961
diff
changeset
|
452 will not be changed by @code{matlab.lang.makeValidName} and the |
0d67814eb038
jsondecode.cc: New option "makeValidName" to disable string validation.
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
29961
diff
changeset
|
453 @qcode{\"ReplacementStyle\"} and @qcode{\"Prefix\"} options will be ignored. |
0d67814eb038
jsondecode.cc: New option "makeValidName" to disable string validation.
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
29961
diff
changeset
|
454 |
28750
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28626
diff
changeset
|
455 NOTE: Decoding and encoding JSON text is not guaranteed to reproduce the |
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28626
diff
changeset
|
456 original text as some names may be changed by @code{matlab.lang.makeValidName}. |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
457 |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
458 This table shows the conversions from JSON data types to Octave data types: |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
459 |
28750
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28626
diff
changeset
|
460 @multitable @columnfractions 0.50 0.50 |
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28626
diff
changeset
|
461 @headitem JSON data type @tab Octave data type |
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28626
diff
changeset
|
462 @item Boolean @tab scalar logical |
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28626
diff
changeset
|
463 @item Number @tab scalar double |
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28626
diff
changeset
|
464 @item String @tab vector of characters |
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28626
diff
changeset
|
465 @item Object @tab scalar struct (field names of the struct may be different from the keys of the JSON object due to @code{matlab_lang_makeValidName} |
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28626
diff
changeset
|
466 @item null, inside a numeric array @tab @code{NaN} |
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28626
diff
changeset
|
467 @item null, inside a non-numeric array @tab empty double array @code{[]} |
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28626
diff
changeset
|
468 @item Array, of different data types @tab cell array |
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28626
diff
changeset
|
469 @item Array, of Booleans @tab logical array |
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28626
diff
changeset
|
470 @item Array, of Numbers @tab double array |
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28626
diff
changeset
|
471 @item Array, of Strings @tab cell array of character vectors (@code{cellstr}) |
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28626
diff
changeset
|
472 @item Array of Objects, same field names @tab struct array |
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28626
diff
changeset
|
473 @item Array of Objects, different field names @tab cell array of scalar structs |
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28626
diff
changeset
|
474 @end multitable |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
475 |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
476 Examples: |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
477 |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
478 @example |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
479 @group |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
480 jsondecode ('[1, 2, null, 3]') |
28624
aae9d7f098bd
Support for RapidJSON 1.1.0 with jsonencode and jsondecode
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
28615
diff
changeset
|
481 @result{} ans = |
aae9d7f098bd
Support for RapidJSON 1.1.0 with jsonencode and jsondecode
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
28615
diff
changeset
|
482 |
aae9d7f098bd
Support for RapidJSON 1.1.0 with jsonencode and jsondecode
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
28615
diff
changeset
|
483 1 |
aae9d7f098bd
Support for RapidJSON 1.1.0 with jsonencode and jsondecode
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
28615
diff
changeset
|
484 2 |
aae9d7f098bd
Support for RapidJSON 1.1.0 with jsonencode and jsondecode
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
28615
diff
changeset
|
485 NaN |
aae9d7f098bd
Support for RapidJSON 1.1.0 with jsonencode and jsondecode
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
28615
diff
changeset
|
486 3 |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
487 @end group |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
488 |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
489 @group |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
490 jsondecode ('["foo", "bar", ["foo", "bar"]]') |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
491 @result{} ans = |
28624
aae9d7f098bd
Support for RapidJSON 1.1.0 with jsonencode and jsondecode
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
28615
diff
changeset
|
492 @{ |
aae9d7f098bd
Support for RapidJSON 1.1.0 with jsonencode and jsondecode
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
28615
diff
changeset
|
493 [1,1] = foo |
aae9d7f098bd
Support for RapidJSON 1.1.0 with jsonencode and jsondecode
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
28615
diff
changeset
|
494 [2,1] = bar |
aae9d7f098bd
Support for RapidJSON 1.1.0 with jsonencode and jsondecode
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
28615
diff
changeset
|
495 [3,1] = |
aae9d7f098bd
Support for RapidJSON 1.1.0 with jsonencode and jsondecode
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
28615
diff
changeset
|
496 @{ |
aae9d7f098bd
Support for RapidJSON 1.1.0 with jsonencode and jsondecode
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
28615
diff
changeset
|
497 [1,1] = foo |
aae9d7f098bd
Support for RapidJSON 1.1.0 with jsonencode and jsondecode
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
28615
diff
changeset
|
498 [2,1] = bar |
aae9d7f098bd
Support for RapidJSON 1.1.0 with jsonencode and jsondecode
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
28615
diff
changeset
|
499 @} |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
500 |
28624
aae9d7f098bd
Support for RapidJSON 1.1.0 with jsonencode and jsondecode
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
28615
diff
changeset
|
501 @} |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
502 @end group |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
503 |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
504 @group |
28750
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28626
diff
changeset
|
505 jsondecode ('@{"nu#m#ber": 7, "s#tr#ing": "hi"@}', ... |
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28626
diff
changeset
|
506 'ReplacementStyle', 'delete') |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
507 @result{} scalar structure containing the fields: |
28624
aae9d7f098bd
Support for RapidJSON 1.1.0 with jsonencode and jsondecode
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
28615
diff
changeset
|
508 |
aae9d7f098bd
Support for RapidJSON 1.1.0 with jsonencode and jsondecode
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
28615
diff
changeset
|
509 number = 7 |
aae9d7f098bd
Support for RapidJSON 1.1.0 with jsonencode and jsondecode
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
28615
diff
changeset
|
510 string = hi |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
511 @end group |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
512 |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
513 @group |
29977
0d67814eb038
jsondecode.cc: New option "makeValidName" to disable string validation.
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
29961
diff
changeset
|
514 jsondecode ('@{"nu#m#ber": 7, "s#tr#ing": "hi"@}', ... |
0d67814eb038
jsondecode.cc: New option "makeValidName" to disable string validation.
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
29961
diff
changeset
|
515 'makeValidName', false) |
0d67814eb038
jsondecode.cc: New option "makeValidName" to disable string validation.
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
29961
diff
changeset
|
516 @result{} scalar structure containing the fields: |
0d67814eb038
jsondecode.cc: New option "makeValidName" to disable string validation.
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
29961
diff
changeset
|
517 |
0d67814eb038
jsondecode.cc: New option "makeValidName" to disable string validation.
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
29961
diff
changeset
|
518 nu#m#ber = 7 |
0d67814eb038
jsondecode.cc: New option "makeValidName" to disable string validation.
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
29961
diff
changeset
|
519 s#tr#ing = hi |
0d67814eb038
jsondecode.cc: New option "makeValidName" to disable string validation.
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
29961
diff
changeset
|
520 @end group |
0d67814eb038
jsondecode.cc: New option "makeValidName" to disable string validation.
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
29961
diff
changeset
|
521 |
0d67814eb038
jsondecode.cc: New option "makeValidName" to disable string validation.
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
29961
diff
changeset
|
522 @group |
28624
aae9d7f098bd
Support for RapidJSON 1.1.0 with jsonencode and jsondecode
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
28615
diff
changeset
|
523 jsondecode ('@{"1": "one", "2": "two"@}', 'Prefix', 'm_') |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
524 @result{} scalar structure containing the fields: |
28624
aae9d7f098bd
Support for RapidJSON 1.1.0 with jsonencode and jsondecode
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
28615
diff
changeset
|
525 |
aae9d7f098bd
Support for RapidJSON 1.1.0 with jsonencode and jsondecode
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
28615
diff
changeset
|
526 m_1 = one |
aae9d7f098bd
Support for RapidJSON 1.1.0 with jsonencode and jsondecode
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
28615
diff
changeset
|
527 m_2 = two |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
528 @end group |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
529 @end example |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
530 |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
531 @seealso{jsonencode, matlab.lang.makeValidName} |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
532 @end deftypefn */) |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
533 { |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
534 #if defined (HAVE_RAPIDJSON) |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
535 |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
536 int nargin = args.length (); |
28750
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28626
diff
changeset
|
537 |
28624
aae9d7f098bd
Support for RapidJSON 1.1.0 with jsonencode and jsondecode
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
28615
diff
changeset
|
538 // makeValidName options are pairs, the number of arguments must be odd. |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
539 if (! (nargin % 2)) |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
540 print_usage (); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
541 |
29977
0d67814eb038
jsondecode.cc: New option "makeValidName" to disable string validation.
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
29961
diff
changeset
|
542 // Detect if the user wants to use makeValidName |
0d67814eb038
jsondecode.cc: New option "makeValidName" to disable string validation.
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
29961
diff
changeset
|
543 bool use_makeValidName = true; |
0d67814eb038
jsondecode.cc: New option "makeValidName" to disable string validation.
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
29961
diff
changeset
|
544 octave_value_list make_valid_name_params; |
0d67814eb038
jsondecode.cc: New option "makeValidName" to disable string validation.
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
29961
diff
changeset
|
545 for (auto i = 1; i < nargin; i = i + 2) |
0d67814eb038
jsondecode.cc: New option "makeValidName" to disable string validation.
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
29961
diff
changeset
|
546 { |
0d67814eb038
jsondecode.cc: New option "makeValidName" to disable string validation.
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
29961
diff
changeset
|
547 std::string parameter = args(i).xstring_value ("jsondecode: " |
0d67814eb038
jsondecode.cc: New option "makeValidName" to disable string validation.
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
29961
diff
changeset
|
548 "option argument must be a string"); |
0d67814eb038
jsondecode.cc: New option "makeValidName" to disable string validation.
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
29961
diff
changeset
|
549 if (string::strcmpi (parameter, "makeValidName")) |
0d67814eb038
jsondecode.cc: New option "makeValidName" to disable string validation.
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
29961
diff
changeset
|
550 { |
0d67814eb038
jsondecode.cc: New option "makeValidName" to disable string validation.
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
29961
diff
changeset
|
551 use_makeValidName = args(i + 1).xbool_value ("jsondecode: " |
0d67814eb038
jsondecode.cc: New option "makeValidName" to disable string validation.
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
29961
diff
changeset
|
552 "'makeValidName' value must be a bool"); |
0d67814eb038
jsondecode.cc: New option "makeValidName" to disable string validation.
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
29961
diff
changeset
|
553 } |
0d67814eb038
jsondecode.cc: New option "makeValidName" to disable string validation.
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
29961
diff
changeset
|
554 else |
0d67814eb038
jsondecode.cc: New option "makeValidName" to disable string validation.
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
29961
diff
changeset
|
555 make_valid_name_params.append (args.slice(i, 2)); |
0d67814eb038
jsondecode.cc: New option "makeValidName" to disable string validation.
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
29961
diff
changeset
|
556 } |
0d67814eb038
jsondecode.cc: New option "makeValidName" to disable string validation.
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
29961
diff
changeset
|
557 |
0d67814eb038
jsondecode.cc: New option "makeValidName" to disable string validation.
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
29961
diff
changeset
|
558 make_valid_name_options* options = nullptr; |
0d67814eb038
jsondecode.cc: New option "makeValidName" to disable string validation.
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
29961
diff
changeset
|
559 |
0d67814eb038
jsondecode.cc: New option "makeValidName" to disable string validation.
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
29961
diff
changeset
|
560 if (use_makeValidName) |
0d67814eb038
jsondecode.cc: New option "makeValidName" to disable string validation.
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
29961
diff
changeset
|
561 { |
0d67814eb038
jsondecode.cc: New option "makeValidName" to disable string validation.
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
29961
diff
changeset
|
562 make_valid_name_options options_obj (make_valid_name_params); |
0d67814eb038
jsondecode.cc: New option "makeValidName" to disable string validation.
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
29961
diff
changeset
|
563 options = &options_obj; |
0d67814eb038
jsondecode.cc: New option "makeValidName" to disable string validation.
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
29961
diff
changeset
|
564 } |
29092
38e22065d9ec
jsondecode.cc: use `octave::make_valid_name` not `matlab.lang.makeValidName` (patch #9998)
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
28801
diff
changeset
|
565 |
28750
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28626
diff
changeset
|
566 if (! args(0).is_string ()) |
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28626
diff
changeset
|
567 error ("jsondecode: JSON_TXT must be a character string"); |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
568 |
28750
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28626
diff
changeset
|
569 std::string json = args(0).string_value (); |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
570 rapidjson::Document d; |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
571 // DOM is chosen instead of SAX as SAX publishes events to a handler that |
28624
aae9d7f098bd
Support for RapidJSON 1.1.0 with jsonencode and jsondecode
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
28615
diff
changeset
|
572 // decides what to do depending on the event only. This will cause a |
aae9d7f098bd
Support for RapidJSON 1.1.0 with jsonencode and jsondecode
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
28615
diff
changeset
|
573 // problem in decoding JSON arrays as the output may be an array or a cell |
aae9d7f098bd
Support for RapidJSON 1.1.0 with jsonencode and jsondecode
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
28615
diff
changeset
|
574 // and that doesn't only depend on the event (startArray) but also on the |
aae9d7f098bd
Support for RapidJSON 1.1.0 with jsonencode and jsondecode
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
28615
diff
changeset
|
575 // types of the elements inside the array. |
28750
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28626
diff
changeset
|
576 d.Parse <rapidjson::kParseNanAndInfFlag> (json.c_str ()); |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
577 |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
578 if (d.HasParseError ()) |
28750
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28626
diff
changeset
|
579 error ("jsondecode: parse error at offset %u: %s\n", |
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28626
diff
changeset
|
580 static_cast<unsigned int> (d.GetErrorOffset ()) + 1, |
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28626
diff
changeset
|
581 rapidjson::GetParseError_En (d.GetParseError ())); |
28624
aae9d7f098bd
Support for RapidJSON 1.1.0 with jsonencode and jsondecode
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
28615
diff
changeset
|
582 |
29092
38e22065d9ec
jsondecode.cc: use `octave::make_valid_name` not `matlab.lang.makeValidName` (patch #9998)
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
28801
diff
changeset
|
583 return decode (d, options); |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
584 |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
585 #else |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
586 |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
587 octave_unused_parameter (args); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
588 |
28624
aae9d7f098bd
Support for RapidJSON 1.1.0 with jsonencode and jsondecode
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
28615
diff
changeset
|
589 err_disabled_feature ("jsondecode", "JSON decoding through RapidJSON"); |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
590 |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
591 #endif |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
592 } |
28750
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28626
diff
changeset
|
593 |
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28626
diff
changeset
|
594 /* |
28761
b5461b1dc0ca
Review jsonecode/jsondecode BIST tests.
Rik <rik@octave.org>
parents:
28750
diff
changeset
|
595 Functional BIST tests are located in test/json/jsondecode_BIST.tst |
28750
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28626
diff
changeset
|
596 |
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28626
diff
changeset
|
597 ## Input validation tests |
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28626
diff
changeset
|
598 %!testif HAVE_RAPIDJSON |
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28626
diff
changeset
|
599 %! fail ("jsondecode ()"); |
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28626
diff
changeset
|
600 %! fail ("jsondecode ('1', 2)"); |
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28626
diff
changeset
|
601 %! fail ("jsondecode (1)", "JSON_TXT must be a character string"); |
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28626
diff
changeset
|
602 %! fail ("jsondecode ('12-')", "parse error at offset 3"); |
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28626
diff
changeset
|
603 |
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28626
diff
changeset
|
604 */ |
29958
32c3a5805893
move DEFUN and DEFMETHOD functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
29708
diff
changeset
|
605 |
32c3a5805893
move DEFUN and DEFMETHOD functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
29708
diff
changeset
|
606 OCTAVE_NAMESPACE_END |