Mercurial > octave
annotate libinterp/corefcn/jsonencode.cc @ 31605:e88a07dec498 stable
maint: Use macros to begin/end C++ namespaces.
* oct-conf-post-public.in.h: Define two macros (OCTAVE_BEGIN_NAMESPACE,
OCTAVE_END_NAMESPACE) that can be used to start/end a namespace.
* mk-opts.pl, build-env.h, build-env.in.cc, __betainc__.cc, __contourc__.cc,
__dsearchn__.cc, __eigs__.cc, __expint__.cc, __ftp__.cc, __gammainc__.cc,
__ichol__.cc, __ilu__.cc, __isprimelarge__.cc, __lin_interpn__.cc,
__magick_read__.cc, __pchip_deriv__.cc, __qp__.cc, amd.cc, auto-shlib.cc,
auto-shlib.h, balance.cc, base-text-renderer.cc, base-text-renderer.h,
besselj.cc, bitfcns.cc, bsxfun.cc, c-file-ptr-stream.cc, c-file-ptr-stream.h,
call-stack.cc, call-stack.h, ccolamd.cc, cellfun.cc, chol.cc, colamd.cc,
colloc.cc, conv2.cc, daspk.cc, dasrt.cc, dassl.cc, data.cc, data.h, debug.cc,
defaults.cc, defaults.h, defun-int.h, defun.cc, det.cc, dirfns.cc, display.cc,
display.h, dlmread.cc, dmperm.cc, dot.cc, dynamic-ld.cc, dynamic-ld.h, eig.cc,
ellipj.cc, environment.cc, environment.h, error.cc, error.h, errwarn.h,
event-manager.cc, event-manager.h, event-queue.cc, event-queue.h, fcn-info.cc,
fcn-info.h, fft.cc, fft2.cc, fftn.cc, file-io.cc, filter.cc, find.cc,
ft-text-renderer.cc, ft-text-renderer.h, gcd.cc, getgrent.cc, getpwent.cc,
getrusage.cc, givens.cc, gl-render.cc, gl-render.h, gl2ps-print.cc,
gl2ps-print.h, graphics-toolkit.cc, graphics-toolkit.h, graphics.cc,
graphics.in.h, gsvd.cc, gtk-manager.cc, gtk-manager.h, hash.cc, help.cc,
help.h, hess.cc, hex2num.cc, hook-fcn.cc, hook-fcn.h, input.cc, input.h,
interpreter-private.cc, interpreter-private.h, interpreter.cc, interpreter.h,
inv.cc, jsondecode.cc, jsonencode.cc, kron.cc, latex-text-renderer.cc,
latex-text-renderer.h, load-path.cc, load-path.h, load-save.cc, load-save.h,
lookup.cc, ls-ascii-helper.cc, ls-ascii-helper.h, ls-oct-text.cc, ls-utils.cc,
ls-utils.h, lsode.cc, lu.cc, mappers.cc, matrix_type.cc, max.cc, mex-private.h,
mex.cc, mgorth.cc, nproc.cc, oct-fstrm.cc, oct-fstrm.h, oct-hdf5-types.cc,
oct-hdf5-types.h, oct-hist.cc, oct-hist.h, oct-iostrm.cc, oct-iostrm.h,
oct-opengl.h, oct-prcstrm.cc, oct-prcstrm.h, oct-procbuf.cc, oct-procbuf.h,
oct-process.cc, oct-process.h, oct-stdstrm.h, oct-stream.cc, oct-stream.h,
oct-strstrm.cc, oct-strstrm.h, oct-tex-lexer.in.ll, oct-tex-parser.yy,
ordqz.cc, ordschur.cc, pager.cc, pager.h, pinv.cc, pow2.cc, pr-flt-fmt.cc,
pr-output.cc, procstream.cc, procstream.h, psi.cc, qr.cc, quad.cc, quadcc.cc,
qz.cc, rand.cc, rcond.cc, regexp.cc, schur.cc, settings.cc, settings.h,
sighandlers.cc, sighandlers.h, sparse-xdiv.cc, sparse-xdiv.h, sparse-xpow.cc,
sparse-xpow.h, sparse.cc, spparms.cc, sqrtm.cc, stack-frame.cc, stack-frame.h,
stream-euler.cc, strfind.cc, strfns.cc, sub2ind.cc, svd.cc, sylvester.cc,
symbfact.cc, syminfo.cc, syminfo.h, symrcm.cc, symrec.cc, symrec.h,
symscope.cc, symscope.h, symtab.cc, symtab.h, syscalls.cc, sysdep.cc, sysdep.h,
text-engine.cc, text-engine.h, text-renderer.cc, text-renderer.h, time.cc,
toplev.cc, tril.cc, tsearch.cc, typecast.cc, url-handle-manager.cc,
url-handle-manager.h, urlwrite.cc, utils.cc, utils.h, variables.cc,
variables.h, xdiv.cc, xdiv.h, xnorm.cc, xnorm.h, xpow.cc, xpow.h,
__delaunayn__.cc, __fltk_uigetfile__.cc, __glpk__.cc, __init_fltk__.cc,
__init_gnuplot__.cc, __ode15__.cc, __voronoi__.cc, audiodevinfo.cc,
audioread.cc, convhulln.cc, fftw.cc, gzip.cc, mk-build-env-features.sh,
mk-builtins.pl, cdef-class.cc, cdef-class.h, cdef-fwd.h, cdef-manager.cc,
cdef-manager.h, cdef-method.cc, cdef-method.h, cdef-object.cc, cdef-object.h,
cdef-package.cc, cdef-package.h, cdef-property.cc, cdef-property.h,
cdef-utils.cc, cdef-utils.h, ov-base.cc, ov-base.h, ov-bool-mat.cc,
ov-builtin.h, ov-cell.cc, ov-class.cc, ov-class.h, ov-classdef.cc,
ov-classdef.h, ov-complex.cc, ov-fcn-handle.cc, ov-fcn-handle.h, ov-fcn.h,
ov-java.cc, ov-java.h, ov-mex-fcn.h, ov-null-mat.cc, ov-oncleanup.cc,
ov-struct.cc, ov-typeinfo.cc, ov-typeinfo.h, ov-usr-fcn.cc, ov-usr-fcn.h,
ov.cc, ov.h, octave.cc, octave.h, mk-ops.sh, op-b-b.cc, op-b-bm.cc,
op-b-sbm.cc, op-bm-b.cc, op-bm-bm.cc, op-bm-sbm.cc, op-cdm-cdm.cc, op-cell.cc,
op-chm.cc, op-class.cc, op-cm-cm.cc, op-cm-cs.cc, op-cm-m.cc, op-cm-s.cc,
op-cm-scm.cc, op-cm-sm.cc, op-cs-cm.cc, op-cs-cs.cc, op-cs-m.cc, op-cs-s.cc,
op-cs-scm.cc, op-cs-sm.cc, op-dm-dm.cc, op-dm-scm.cc, op-dm-sm.cc,
op-dm-template.cc, op-dms-template.cc, op-fcdm-fcdm.cc, op-fcm-fcm.cc,
op-fcm-fcs.cc, op-fcm-fm.cc, op-fcm-fs.cc, op-fcn.cc, op-fcs-fcm.cc,
op-fcs-fcs.cc, op-fcs-fm.cc, op-fcs-fs.cc, op-fdm-fdm.cc, op-fm-fcm.cc,
op-fm-fcs.cc, op-fm-fm.cc, op-fm-fs.cc, op-fs-fcm.cc, op-fs-fcs.cc,
op-fs-fm.cc, op-fs-fs.cc, op-i16-i16.cc, op-i32-i32.cc, op-i64-i64.cc,
op-i8-i8.cc, op-int-concat.cc, op-m-cm.cc, op-m-cs.cc, op-m-m.cc, op-m-s.cc,
op-m-scm.cc, op-m-sm.cc, op-mi.cc, op-pm-pm.cc, op-pm-scm.cc, op-pm-sm.cc,
op-pm-template.cc, op-range.cc, op-s-cm.cc, op-s-cs.cc, op-s-m.cc, op-s-s.cc,
op-s-scm.cc, op-s-sm.cc, op-sbm-b.cc, op-sbm-bm.cc, op-sbm-sbm.cc,
op-scm-cm.cc, op-scm-cs.cc, op-scm-m.cc, op-scm-s.cc, op-scm-scm.cc,
op-scm-sm.cc, op-sm-cm.cc, op-sm-cs.cc, op-sm-m.cc, op-sm-s.cc, op-sm-scm.cc,
op-sm-sm.cc, op-str-m.cc, op-str-s.cc, op-str-str.cc, op-struct.cc,
op-ui16-ui16.cc, op-ui32-ui32.cc, op-ui64-ui64.cc, op-ui8-ui8.cc, ops.h,
anon-fcn-validator.cc, anon-fcn-validator.h, bp-table.cc, bp-table.h,
comment-list.cc, comment-list.h, filepos.h, lex.h, lex.ll, oct-lvalue.cc,
oct-lvalue.h, oct-parse.yy, parse.h, profiler.cc, profiler.h,
pt-anon-scopes.cc, pt-anon-scopes.h, pt-arg-list.cc, pt-arg-list.h,
pt-args-block.cc, pt-args-block.h, pt-array-list.cc, pt-array-list.h,
pt-assign.cc, pt-assign.h, pt-binop.cc, pt-binop.h, pt-bp.cc, pt-bp.h,
pt-cbinop.cc, pt-cbinop.h, pt-cell.cc, pt-cell.h, pt-check.cc, pt-check.h,
pt-classdef.cc, pt-classdef.h, pt-cmd.h, pt-colon.cc, pt-colon.h, pt-const.cc,
pt-const.h, pt-decl.cc, pt-decl.h, pt-eval.cc, pt-eval.h, pt-except.cc,
pt-except.h, pt-exp.cc, pt-exp.h, pt-fcn-handle.cc, pt-fcn-handle.h, pt-id.cc,
pt-id.h, pt-idx.cc, pt-idx.h, pt-jump.h, pt-loop.cc, pt-loop.h, pt-mat.cc,
pt-mat.h, pt-misc.cc, pt-misc.h, pt-pr-code.cc, pt-pr-code.h, pt-select.cc,
pt-select.h, pt-spmd.cc, pt-spmd.h, pt-stmt.cc, pt-stmt.h, pt-tm-const.cc,
pt-tm-const.h, pt-unop.cc, pt-unop.h, pt-vm-eval.cc, pt-walk.cc, pt-walk.h,
pt.cc, pt.h, token.cc, token.h, Range.cc, Range.h, idx-vector.cc, idx-vector.h,
range-fwd.h, CollocWt.cc, CollocWt.h, aepbalance.cc, aepbalance.h, chol.cc,
chol.h, gepbalance.cc, gepbalance.h, gsvd.cc, gsvd.h, hess.cc, hess.h,
lo-mappers.cc, lo-mappers.h, lo-specfun.cc, lo-specfun.h, lu.cc, lu.h,
oct-convn.cc, oct-convn.h, oct-fftw.cc, oct-fftw.h, oct-norm.cc, oct-norm.h,
oct-rand.cc, oct-rand.h, oct-spparms.cc, oct-spparms.h, qr.cc, qr.h, qrp.cc,
qrp.h, randgamma.cc, randgamma.h, randmtzig.cc, randmtzig.h, randpoisson.cc,
randpoisson.h, schur.cc, schur.h, sparse-chol.cc, sparse-chol.h, sparse-lu.cc,
sparse-lu.h, sparse-qr.cc, sparse-qr.h, svd.cc, svd.h, child-list.cc,
child-list.h, dir-ops.cc, dir-ops.h, file-ops.cc, file-ops.h, file-stat.cc,
file-stat.h, lo-sysdep.cc, lo-sysdep.h, lo-sysinfo.cc, lo-sysinfo.h,
mach-info.cc, mach-info.h, oct-env.cc, oct-env.h, oct-group.cc, oct-group.h,
oct-password.cc, oct-password.h, oct-syscalls.cc, oct-syscalls.h, oct-time.cc,
oct-time.h, oct-uname.cc, oct-uname.h, action-container.cc, action-container.h,
base-list.h, cmd-edit.cc, cmd-edit.h, cmd-hist.cc, cmd-hist.h, f77-fcn.h,
file-info.cc, file-info.h, lo-array-errwarn.cc, lo-array-errwarn.h, lo-hash.cc,
lo-hash.h, lo-ieee.h, lo-regexp.cc, lo-regexp.h, lo-utils.cc, lo-utils.h,
oct-base64.cc, oct-base64.h, oct-glob.cc, oct-glob.h, oct-inttypes.h,
oct-mutex.cc, oct-mutex.h, oct-refcount.h, oct-shlib.cc, oct-shlib.h,
oct-sparse.cc, oct-sparse.h, oct-string.h, octave-preserve-stream-state.h,
pathsearch.cc, pathsearch.h, quit.cc, quit.h, unwind-prot.cc, unwind-prot.h,
url-transfer.cc, url-transfer.h : Use new macros to begin/end C++ namespaces.
author | Rik <rik@octave.org> |
---|---|
date | Thu, 01 Dec 2022 14:23:45 -0800 |
parents | 796f54d4ddbf |
children | aac27ad79be6 |
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 // |
30564
796f54d4ddbf
update Octave Project Developers copyright for the new year
John W. Eaton <jwe@octave.org>
parents:
30390
diff
changeset
|
3 // Copyright (C) 2020-2022 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 "builtin-defun-decls.h" |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
31 #include "defun.h" |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
32 #include "error.h" |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
33 #include "errwarn.h" |
28624
aae9d7f098bd
Support for RapidJSON 1.1.0 with jsonencode and jsondecode
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
28615
diff
changeset
|
34 #include "oct-string.h" |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
35 #include "ovl.h" |
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/stringbuffer.h> |
28624
aae9d7f098bd
Support for RapidJSON 1.1.0 with jsonencode and jsondecode
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
28615
diff
changeset
|
39 # include <rapidjson/writer.h> |
28751
699bba597610
Use specific configure test to detect RapidJSON PrettyWriter functionality (bug #59114)
Rik <rik@octave.org>
parents:
28750
diff
changeset
|
40 # if defined (HAVE_RAPIDJSON_PRETTYWRITER) |
699bba597610
Use specific configure test to detect RapidJSON PrettyWriter functionality (bug #59114)
Rik <rik@octave.org>
parents:
28750
diff
changeset
|
41 # include <rapidjson/prettywriter.h> |
699bba597610
Use specific configure test to detect RapidJSON PrettyWriter functionality (bug #59114)
Rik <rik@octave.org>
parents:
28750
diff
changeset
|
42 # endif |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
43 #endif |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
44 |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
45 #if defined (HAVE_RAPIDJSON) |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
46 |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
47 //! Encodes a scalar Octave value into a numerical JSON value. |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
48 //! |
28750
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28657
diff
changeset
|
49 //! @param writer RapidJSON's writer that is responsible for generating JSON. |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
50 //! @param obj scalar Octave value. |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
51 //! @param ConvertInfAndNaN @c bool that converts @c Inf and @c NaN to @c null. |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
52 //! |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
53 //! @b Example: |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
54 //! |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
55 //! @code{.cc} |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
56 //! octave_value obj (7); |
28750
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28657
diff
changeset
|
57 //! encode_numeric (writer, obj, true); |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
58 //! @endcode |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
59 |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
60 template <typename T> void |
28750
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28657
diff
changeset
|
61 encode_numeric (T& writer, const octave_value& obj, |
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28657
diff
changeset
|
62 const bool& ConvertInfAndNaN) |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
63 { |
28750
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28657
diff
changeset
|
64 double value = obj.scalar_value (); |
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28657
diff
changeset
|
65 |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
66 if (obj.is_bool_scalar ()) |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
67 writer.Bool (obj.bool_value ()); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
68 // Any numeric input from the interpreter will be in double type so in order |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
69 // to detect ints, we will check if the floor of the input and the input are |
28750
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28657
diff
changeset
|
70 // equal using fabs (A - B) < epsilon method as it is more accurate. |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
71 // If value > 999999, MATLAB will encode it in scientific notation (double) |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
72 else if (fabs (floor (value) - value) < std::numeric_limits<double>::epsilon () |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
73 && value <= 999999 && value >= -999999) |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
74 writer.Int64 (value); |
28750
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28657
diff
changeset
|
75 // Possibly write NULL for non-finite values (-Inf, Inf, NaN, NA) |
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28657
diff
changeset
|
76 else if (ConvertInfAndNaN && ! octave::math::isfinite (value)) |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
77 writer.Null (); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
78 else if (obj.is_double_type ()) |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
79 writer.Double (value); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
80 else |
28750
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28657
diff
changeset
|
81 error ("jsonencode: unsupported type"); |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
82 } |
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 //! Encodes character vectors and arrays into JSON strings. |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
85 //! |
28750
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28657
diff
changeset
|
86 //! @param writer RapidJSON's writer that is responsible for generating JSON. |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
87 //! @param obj character vectors or character arrays. |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
88 //! @param original_dims The original dimensions of the array being encoded. |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
89 //! @param level The level of recursion for the function. |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
90 //! |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
91 //! @b Example: |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
92 //! |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
93 //! @code{.cc} |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
94 //! octave_value obj ("foo"); |
28750
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28657
diff
changeset
|
95 //! encode_string (writer, obj, true); |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
96 //! @endcode |
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 template <typename T> void |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
99 encode_string (T& writer, const octave_value& obj, |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
100 const dim_vector& original_dims, int level = 0) |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
101 { |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
102 charNDArray array = obj.char_array_value (); |
28750
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28657
diff
changeset
|
103 |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
104 if (array.isempty ()) |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
105 writer.String (""); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
106 else if (array.isvector ()) |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
107 { |
28750
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28657
diff
changeset
|
108 // Handle the special case where the input is a vector with more than |
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28657
diff
changeset
|
109 // 2 dimensions (e.g. cat (8, ['a'], ['c'])). In this case, we don't |
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28657
diff
changeset
|
110 // split the inner vectors of the input; we merge them into one. |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
111 if (level == 0) |
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 std::string char_vector = ""; |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
114 for (octave_idx_type i = 0; i < array.numel (); ++i) |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
115 char_vector += array(i); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
116 writer.String (char_vector.c_str ()); |
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 else |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
119 for (octave_idx_type i = 0; i < array.numel () / original_dims(1); ++i) |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
120 { |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
121 std::string char_vector = ""; |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
122 for (octave_idx_type k = 0; k < original_dims(1); ++k) |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
123 char_vector += array(i * original_dims(1) + k); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
124 writer.String (char_vector.c_str ()); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
125 } |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
126 } |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
127 else |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
128 { |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
129 octave_idx_type idx; |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
130 octave_idx_type ndims = array.ndims (); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
131 dim_vector dims = array.dims (); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
132 |
28750
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28657
diff
changeset
|
133 // In this case, we already have a vector. So, we transform it to 2-D |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
134 // vector in order to be detected by "isvector" in the recursive call |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
135 if (dims.num_ones () == ndims - 1) |
30390
a61e1a0f6024
maint: style check C++ files in libinterp/ ahead of 7.1 release.
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
136 { |
a61e1a0f6024
maint: style check C++ files in libinterp/ ahead of 7.1 release.
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
137 // Handle the special case when the input is a vector with more than |
a61e1a0f6024
maint: style check C++ files in libinterp/ ahead of 7.1 release.
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
138 // 2 dimensions (e.g. cat (8, ['a'], ['c'])). In this case, we don't |
a61e1a0f6024
maint: style check C++ files in libinterp/ ahead of 7.1 release.
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
139 // add dimension brackets and treat it as if it is a vector |
a61e1a0f6024
maint: style check C++ files in libinterp/ ahead of 7.1 release.
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
140 if (level != 0) |
a61e1a0f6024
maint: style check C++ files in libinterp/ ahead of 7.1 release.
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
141 // Place an opening and a closing bracket (represents a dimension) |
a61e1a0f6024
maint: style check C++ files in libinterp/ ahead of 7.1 release.
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
142 // for every dimension that equals 1 until we reach the 2-D vector |
a61e1a0f6024
maint: style check C++ files in libinterp/ ahead of 7.1 release.
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
143 for (int i = level; i < ndims - 1; ++i) |
a61e1a0f6024
maint: style check C++ files in libinterp/ ahead of 7.1 release.
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
144 writer.StartArray (); |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
145 |
30390
a61e1a0f6024
maint: style check C++ files in libinterp/ ahead of 7.1 release.
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
146 encode_string (writer, array.as_row (), original_dims, level); |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
147 |
30390
a61e1a0f6024
maint: style check C++ files in libinterp/ ahead of 7.1 release.
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
148 if (level != 0) |
a61e1a0f6024
maint: style check C++ files in libinterp/ ahead of 7.1 release.
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
149 for (int i = level; i < ndims - 1; ++i) |
a61e1a0f6024
maint: style check C++ files in libinterp/ ahead of 7.1 release.
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
150 writer.EndArray (); |
a61e1a0f6024
maint: style check C++ files in libinterp/ ahead of 7.1 release.
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
151 } |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
152 else |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
153 { |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
154 // We place an opening and a closing bracket for each dimension |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
155 // that equals 1 to preserve the number of dimensions when decoding |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
156 // the array after encoding it. |
28750
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28657
diff
changeset
|
157 if (original_dims(level) == 1 && level != 1) |
30390
a61e1a0f6024
maint: style check C++ files in libinterp/ ahead of 7.1 release.
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
158 { |
a61e1a0f6024
maint: style check C++ files in libinterp/ ahead of 7.1 release.
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
159 writer.StartArray (); |
a61e1a0f6024
maint: style check C++ files in libinterp/ ahead of 7.1 release.
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
160 encode_string (writer, array, original_dims, level + 1); |
a61e1a0f6024
maint: style check C++ files in libinterp/ ahead of 7.1 release.
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
161 writer.EndArray (); |
a61e1a0f6024
maint: style check C++ files in libinterp/ ahead of 7.1 release.
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
162 } |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
163 else |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
164 { |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
165 // The second dimension contains the number of the chars in |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
166 // the char vector. We want to treat them as a one object, |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
167 // so we replace it with 1 |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
168 dims(1) = 1; |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
169 |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
170 for (idx = 0; idx < ndims; ++idx) |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
171 if (dims(idx) != 1) |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
172 break; |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
173 // Create the dimensions that will be used to call "num2cell" |
28750
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28657
diff
changeset
|
174 // We called "num2cell" to divide the array to smaller sub-arrays |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
175 // in order to encode it recursively. |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
176 // The recursive encoding is necessary to support encoding of |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
177 // higher-dimensional arrays. |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
178 RowVector conversion_dims; |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
179 conversion_dims.resize (ndims - 1); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
180 for (octave_idx_type i = 0; i < idx; ++i) |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
181 conversion_dims(i) = i + 1; |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
182 for (octave_idx_type i = idx ; i < ndims - 1; ++i) |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
183 conversion_dims(i) = i + 2; |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
184 |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
185 octave_value_list args (obj); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
186 args.append (conversion_dims); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
187 |
29958
32c3a5805893
move DEFUN and DEFMETHOD functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
29956
diff
changeset
|
188 Cell sub_arrays = octave::Fnum2cell (args)(0).cell_value (); |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
189 |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
190 writer.StartArray (); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
191 |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
192 for (octave_idx_type i = 0; i < sub_arrays.numel (); ++i) |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
193 encode_string (writer, sub_arrays(i), original_dims, |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
194 level + 1); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
195 |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
196 writer.EndArray (); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
197 } |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
198 } |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
199 } |
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 |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
202 //! Encodes a struct Octave value into a JSON object or a JSON array depending |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
203 //! on the type of the struct (scalar struct or struct array.) |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
204 //! |
28750
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28657
diff
changeset
|
205 //! @param writer RapidJSON's writer that is responsible for generating JSON. |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
206 //! @param obj struct Octave value. |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
207 //! @param ConvertInfAndNaN @c bool that converts @c Inf and @c NaN to @c null. |
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 //! @b Example: |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
210 //! |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
211 //! @code{.cc} |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
212 //! octave_value obj (octave_map ()); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
213 //! encode_struct (writer, obj,true); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
214 //! @endcode |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
215 |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
216 template <typename T> void |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
217 encode_struct (T& writer, const octave_value& obj, const bool& ConvertInfAndNaN) |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
218 { |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
219 octave_map struct_array = obj.map_value (); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
220 octave_idx_type numel = struct_array.numel (); |
28750
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28657
diff
changeset
|
221 bool is_array = (numel > 1); |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
222 string_vector keys = struct_array.keys (); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
223 |
28750
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28657
diff
changeset
|
224 if (is_array) |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
225 writer.StartArray (); |
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 for (octave_idx_type i = 0; i < numel; ++i) |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
228 { |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
229 writer.StartObject (); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
230 for (octave_idx_type k = 0; k < keys.numel (); ++k) |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
231 { |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
232 writer.Key (keys(k).c_str ()); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
233 encode (writer, struct_array(i).getfield (keys(k)), ConvertInfAndNaN); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
234 } |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
235 writer.EndObject (); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
236 } |
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:
28657
diff
changeset
|
238 if (is_array) |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
239 writer.EndArray (); |
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 |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
242 //! Encodes a Cell Octave value into a JSON array |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
243 //! |
28750
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28657
diff
changeset
|
244 //! @param writer RapidJSON's writer that is responsible for generating JSON. |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
245 //! @param obj Cell Octave value. |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
246 //! @param ConvertInfAndNaN @c bool that converts @c Inf and @c NaN to @c null. |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
247 //! |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
248 //! @b Example: |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
249 //! |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
250 //! @code{.cc} |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
251 //! octave_value obj (cell ()); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
252 //! encode_cell (writer, obj,true); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
253 //! @endcode |
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 template <typename T> void |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
256 encode_cell (T& writer, const octave_value& obj, const bool& ConvertInfAndNaN) |
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 Cell cell = obj.cell_value (); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
259 |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
260 writer.StartArray (); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
261 |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
262 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
|
263 encode (writer, cell(i), ConvertInfAndNaN); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
264 |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
265 writer.EndArray (); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
266 } |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
267 |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
268 //! Encodes a numeric or logical Octave array into a JSON array |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
269 //! |
28750
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28657
diff
changeset
|
270 //! @param writer RapidJSON's writer that is responsible for generating JSON. |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
271 //! @param obj numeric or logical Octave array. |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
272 //! @param ConvertInfAndNaN @c bool that converts @c Inf and @c NaN to @c null. |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
273 //! @param original_dims The original dimensions of the array being encoded. |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
274 //! @param level The level of recursion for the function. |
28853
97d8ef9b7348
From e2bcb18a88f3075348dd53b5768110d621d8455d Mon Sep 17 00:00:00 2001
Abdallah-Elshamy <abdallah.k.elshamy@gmail.com>
parents:
28850
diff
changeset
|
275 //! @param is_logical optional @c bool that indicates if the array is logical. |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
276 //! |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
277 //! @b Example: |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
278 //! |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
279 //! @code{.cc} |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
280 //! octave_value obj (NDArray ()); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
281 //! encode_array (writer, obj,true); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
282 //! @endcode |
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 template <typename T> void |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
285 encode_array (T& writer, const octave_value& obj, const bool& ConvertInfAndNaN, |
28853
97d8ef9b7348
From e2bcb18a88f3075348dd53b5768110d621d8455d Mon Sep 17 00:00:00 2001
Abdallah-Elshamy <abdallah.k.elshamy@gmail.com>
parents:
28850
diff
changeset
|
286 const dim_vector& original_dims, int level = 0, |
97d8ef9b7348
From e2bcb18a88f3075348dd53b5768110d621d8455d Mon Sep 17 00:00:00 2001
Abdallah-Elshamy <abdallah.k.elshamy@gmail.com>
parents:
28850
diff
changeset
|
287 bool is_logical = false) |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
288 { |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
289 NDArray array = obj.array_value (); |
28853
97d8ef9b7348
From e2bcb18a88f3075348dd53b5768110d621d8455d Mon Sep 17 00:00:00 2001
Abdallah-Elshamy <abdallah.k.elshamy@gmail.com>
parents:
28850
diff
changeset
|
290 // is_logical is assigned at level 0. I think this is better than changing |
97d8ef9b7348
From e2bcb18a88f3075348dd53b5768110d621d8455d Mon Sep 17 00:00:00 2001
Abdallah-Elshamy <abdallah.k.elshamy@gmail.com>
parents:
28850
diff
changeset
|
291 // many places in the code, and it makes the function more modular. |
97d8ef9b7348
From e2bcb18a88f3075348dd53b5768110d621d8455d Mon Sep 17 00:00:00 2001
Abdallah-Elshamy <abdallah.k.elshamy@gmail.com>
parents:
28850
diff
changeset
|
292 if (level == 0) |
97d8ef9b7348
From e2bcb18a88f3075348dd53b5768110d621d8455d Mon Sep 17 00:00:00 2001
Abdallah-Elshamy <abdallah.k.elshamy@gmail.com>
parents:
28850
diff
changeset
|
293 is_logical = obj.islogical (); |
97d8ef9b7348
From e2bcb18a88f3075348dd53b5768110d621d8455d Mon Sep 17 00:00:00 2001
Abdallah-Elshamy <abdallah.k.elshamy@gmail.com>
parents:
28850
diff
changeset
|
294 |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
295 if (array.isempty ()) |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
296 { |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
297 writer.StartArray (); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
298 writer.EndArray (); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
299 } |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
300 else if (array.isvector ()) |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
301 { |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
302 writer.StartArray (); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
303 for (octave_idx_type i = 0; i < array.numel (); ++i) |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
304 { |
28853
97d8ef9b7348
From e2bcb18a88f3075348dd53b5768110d621d8455d Mon Sep 17 00:00:00 2001
Abdallah-Elshamy <abdallah.k.elshamy@gmail.com>
parents:
28850
diff
changeset
|
305 if (is_logical) |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
306 encode_numeric (writer, bool (array(i)), ConvertInfAndNaN); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
307 else |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
308 encode_numeric (writer, array(i), ConvertInfAndNaN); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
309 } |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
310 writer.EndArray (); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
311 } |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
312 else |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
313 { |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
314 octave_idx_type idx; |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
315 octave_idx_type ndims = array.ndims (); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
316 dim_vector dims = array.dims (); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
317 |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
318 // In this case, we already have a vector. So, we transform it to 2-D |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
319 // vector in order to be detected by "isvector" in the recursive call |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
320 if (dims.num_ones () == ndims - 1) |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
321 { |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
322 // Handle the special case when the input is a vector with more than |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
323 // 2 dimensions (e.g. ones ([1 1 1 1 1 6])). In this case, we don't |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
324 // add dimension brackets and treat it as if it is a vector |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
325 if (level != 0) |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
326 // Place an opening and a closing bracket (represents a dimension) |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
327 // for every dimension that equals 1 till we reach the 2-D vector |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
328 for (int i = level; i < ndims - 1; ++i) |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
329 writer.StartArray (); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
330 |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
331 encode_array (writer, array.as_row (), ConvertInfAndNaN, |
28853
97d8ef9b7348
From e2bcb18a88f3075348dd53b5768110d621d8455d Mon Sep 17 00:00:00 2001
Abdallah-Elshamy <abdallah.k.elshamy@gmail.com>
parents:
28850
diff
changeset
|
332 original_dims, level + 1, is_logical); |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
333 |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
334 if (level != 0) |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
335 for (int i = level; i < ndims - 1; ++i) |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
336 writer.EndArray (); |
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 else |
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 // We place an opening and a closing bracket for each dimension |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
341 // that equals 1 to preserve the number of dimensions when decoding |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
342 // the array after encoding it. |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
343 if (original_dims (level) == 1) |
30390
a61e1a0f6024
maint: style check C++ files in libinterp/ ahead of 7.1 release.
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
344 { |
a61e1a0f6024
maint: style check C++ files in libinterp/ ahead of 7.1 release.
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
345 writer.StartArray (); |
a61e1a0f6024
maint: style check C++ files in libinterp/ ahead of 7.1 release.
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
346 encode_array (writer, array, ConvertInfAndNaN, |
a61e1a0f6024
maint: style check C++ files in libinterp/ ahead of 7.1 release.
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
347 original_dims, level + 1, is_logical); |
a61e1a0f6024
maint: style check C++ files in libinterp/ ahead of 7.1 release.
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
348 writer.EndArray (); |
a61e1a0f6024
maint: style check C++ files in libinterp/ ahead of 7.1 release.
Rik <rik@octave.org>
parents:
29961
diff
changeset
|
349 } |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
350 else |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
351 { |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
352 for (idx = 0; idx < ndims; ++idx) |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
353 if (dims(idx) != 1) |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
354 break; |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
355 |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
356 // Create the dimensions that will be used to call "num2cell" |
28750
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28657
diff
changeset
|
357 // We called "num2cell" to divide the array to smaller sub-arrays |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
358 // in order to encode it recursively. |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
359 // The recursive encoding is necessary to support encoding of |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
360 // higher-dimensional arrays. |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
361 RowVector conversion_dims; |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
362 conversion_dims.resize (ndims - 1); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
363 for (octave_idx_type i = 0; i < idx; ++i) |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
364 conversion_dims(i) = i + 1; |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
365 for (octave_idx_type i = idx ; i < ndims - 1; ++i) |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
366 conversion_dims(i) = i + 2; |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
367 |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
368 octave_value_list args (obj); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
369 args.append (conversion_dims); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
370 |
29958
32c3a5805893
move DEFUN and DEFMETHOD functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
29956
diff
changeset
|
371 Cell sub_arrays = octave::Fnum2cell (args)(0).cell_value (); |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
372 |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
373 writer.StartArray (); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
374 |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
375 for (octave_idx_type i = 0; i < sub_arrays.numel (); ++i) |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
376 encode_array (writer, sub_arrays(i), ConvertInfAndNaN, |
28853
97d8ef9b7348
From e2bcb18a88f3075348dd53b5768110d621d8455d Mon Sep 17 00:00:00 2001
Abdallah-Elshamy <abdallah.k.elshamy@gmail.com>
parents:
28850
diff
changeset
|
377 original_dims, level + 1, is_logical); |
28615
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 writer.EndArray (); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
380 } |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
381 } |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
382 } |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
383 } |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
384 |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
385 //! Encodes any Octave object. This function only serves as an interface |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
386 //! 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
|
387 //! |
28750
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28657
diff
changeset
|
388 //! @param writer RapidJSON's writer that is responsible for generating JSON. |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
389 //! @param obj any @ref octave_value that is supported. |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
390 //! @param ConvertInfAndNaN @c bool that converts @c Inf and @c NaN to @c null. |
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 //! @b Example: |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
393 //! |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
394 //! @code{.cc} |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
395 //! octave_value obj (true); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
396 //! encode (writer, obj,true); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
397 //! @endcode |
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 template <typename T> void |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
400 encode (T& writer, const octave_value& obj, const bool& ConvertInfAndNaN) |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
401 { |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
402 if (obj.is_real_scalar ()) |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
403 encode_numeric (writer, obj, ConvertInfAndNaN); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
404 // As I checked for scalars, this will detect numeric & logical arrays |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
405 else if (obj.isnumeric () || obj.islogical ()) |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
406 encode_array (writer, obj, ConvertInfAndNaN, obj.dims ()); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
407 else if (obj.is_string ()) |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
408 encode_string (writer, obj, obj.dims ()); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
409 else if (obj.isstruct ()) |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
410 encode_struct (writer, obj, ConvertInfAndNaN); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
411 else if (obj.iscell ()) |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
412 encode_cell (writer, obj, ConvertInfAndNaN); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
413 else if (obj.class_name () == "containers.Map") |
28759
b6bed53f059f
Reset the warning state after changing it locally in jsonencode (bug #59122).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28753
diff
changeset
|
414 // To extract the data in containers.Map, convert it to a struct. |
b6bed53f059f
Reset the warning state after changing it locally in jsonencode (bug #59122).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28753
diff
changeset
|
415 // The struct will have a "map" field whose value is a struct that |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
416 // contains the desired data. |
28759
b6bed53f059f
Reset the warning state after changing it locally in jsonencode (bug #59122).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28753
diff
changeset
|
417 // To avoid warnings due to that conversion, disable the |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
418 // "Octave:classdef-to-struct" warning and re-enable it. |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
419 { |
28800
d28016d16e9a
jsonencode.cc: Use unwind_action rather than unwind_protect for performnace.
Rik <rik@octave.org>
parents:
28761
diff
changeset
|
420 octave::unwind_action restore_warning_state |
28850
445e5ac1f58d
in unwind_action objects, capture variables in lambda expressions when possible
John W. Eaton <jwe@octave.org>
parents:
28800
diff
changeset
|
421 ([] (const octave_value_list& old_warning_state) |
28800
d28016d16e9a
jsonencode.cc: Use unwind_action rather than unwind_protect for performnace.
Rik <rik@octave.org>
parents:
28761
diff
changeset
|
422 { |
29956
a956ca6698d2
move some error handling functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
29449
diff
changeset
|
423 octave::set_warning_state (old_warning_state); |
a956ca6698d2
move some error handling functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
29449
diff
changeset
|
424 }, octave::set_warning_state ("Octave:classdef-to-struct", "off")); |
28759
b6bed53f059f
Reset the warning state after changing it locally in jsonencode (bug #59122).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28753
diff
changeset
|
425 |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
426 encode_struct (writer, obj.scalar_map_value ().getfield ("map"), |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
427 ConvertInfAndNaN); |
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 else if (obj.isobject ()) |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
430 { |
28800
d28016d16e9a
jsonencode.cc: Use unwind_action rather than unwind_protect for performnace.
Rik <rik@octave.org>
parents:
28761
diff
changeset
|
431 octave::unwind_action restore_warning_state |
28850
445e5ac1f58d
in unwind_action objects, capture variables in lambda expressions when possible
John W. Eaton <jwe@octave.org>
parents:
28800
diff
changeset
|
432 ([] (const octave_value_list& old_warning_state) |
28800
d28016d16e9a
jsonencode.cc: Use unwind_action rather than unwind_protect for performnace.
Rik <rik@octave.org>
parents:
28761
diff
changeset
|
433 { |
29956
a956ca6698d2
move some error handling functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
29449
diff
changeset
|
434 octave::set_warning_state (old_warning_state); |
a956ca6698d2
move some error handling functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
29449
diff
changeset
|
435 }, octave::set_warning_state ("Octave:classdef-to-struct", "off")); |
28759
b6bed53f059f
Reset the warning state after changing it locally in jsonencode (bug #59122).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28753
diff
changeset
|
436 |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
437 encode_struct (writer, obj.scalar_map_value (), ConvertInfAndNaN); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
438 } |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
439 else |
28750
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28657
diff
changeset
|
440 error ("jsonencode: unsupported type"); |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
441 } |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
442 |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
443 #endif |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
444 |
31605
e88a07dec498
maint: Use macros to begin/end C++ namespaces.
Rik <rik@octave.org>
parents:
30564
diff
changeset
|
445 OCTAVE_BEGIN_NAMESPACE(octave) |
29958
32c3a5805893
move DEFUN and DEFMETHOD functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
29956
diff
changeset
|
446 |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
447 DEFUN (jsonencode, args, , |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
448 doc: /* -*- texinfo -*- |
28750
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28657
diff
changeset
|
449 @deftypefn {} {@var{JSON_txt} =} jsonencode (@var{object}) |
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28657
diff
changeset
|
450 @deftypefnx {} {@var{JSON_txt} =} jsonencode (@dots{}, "ConvertInfAndNaN", @var{TF}) |
29449
3a680307d4aa
jsonencode.cc: Make pretty formating compatible with MATLAB (bug #60259).
Abdallah-Elshamy <abdallah.k.elshamy@gmail.com>
parents:
29359
diff
changeset
|
451 @deftypefnx {} {@var{JSON_txt} =} jsonencode (@dots{}, "PrettyPrint", @var{TF}) |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
452 |
28750
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28657
diff
changeset
|
453 Encode Octave data types into JSON text. |
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28657
diff
changeset
|
454 |
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28657
diff
changeset
|
455 The input @var{object} is an Octave variable to encode. |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
456 |
28750
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28657
diff
changeset
|
457 The output @var{JSON_txt} is the JSON text that contains the result of encoding |
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28657
diff
changeset
|
458 @var{object}. |
28615
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:
28657
diff
changeset
|
460 If the value of the option @qcode{"ConvertInfAndNaN"} is true then @code{NaN}, |
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28657
diff
changeset
|
461 @code{NA}, @code{-Inf}, and @code{Inf} values will be converted to |
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28657
diff
changeset
|
462 @qcode{"null"} in the output. If it is false then they will remain as their |
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28657
diff
changeset
|
463 original values. The default value for this option is true. |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
464 |
29449
3a680307d4aa
jsonencode.cc: Make pretty formating compatible with MATLAB (bug #60259).
Abdallah-Elshamy <abdallah.k.elshamy@gmail.com>
parents:
29359
diff
changeset
|
465 If the value of the option @qcode{"PrettyPrint"} is true, the output text will |
28624
aae9d7f098bd
Support for RapidJSON 1.1.0 with jsonencode and jsondecode
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
28615
diff
changeset
|
466 have indentations and line feeds. If it is false, the output will be condensed |
28750
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28657
diff
changeset
|
467 and written without whitespace. The default value for this option is false. |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
468 |
28750
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28657
diff
changeset
|
469 Programming Notes: |
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28657
diff
changeset
|
470 |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
471 @itemize @bullet |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
472 @item |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
473 Complex numbers are not supported. |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
474 |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
475 @item |
28750
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28657
diff
changeset
|
476 classdef objects are first converted to structs and then encoded. |
28615
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 @item |
29117
10a35049bad7
doc: Cleanup Texinfo macros use in documentation.
Rik <rik@octave.org>
parents:
28853
diff
changeset
|
479 To preserve escape characters (e.g., @qcode{"@backslashchar{}n"}), use |
10a35049bad7
doc: Cleanup Texinfo macros use in documentation.
Rik <rik@octave.org>
parents:
28853
diff
changeset
|
480 single-quoted strings. |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
481 |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
482 @item |
29117
10a35049bad7
doc: Cleanup Texinfo macros use in documentation.
Rik <rik@octave.org>
parents:
28853
diff
changeset
|
483 Every character after the null character (@qcode{"@backslashchar{}0"}) in a |
10a35049bad7
doc: Cleanup Texinfo macros use in documentation.
Rik <rik@octave.org>
parents:
28853
diff
changeset
|
484 double-quoted string will be dropped during encoding. |
28657
174550af014f
document and test escape characters in jsonencode
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
28624
diff
changeset
|
485 |
174550af014f
document and test escape characters in jsonencode
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
28624
diff
changeset
|
486 @item |
28750
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28657
diff
changeset
|
487 Encoding and decoding an array is not guaranteed to preserve the dimensions |
28761
b5461b1dc0ca
Review jsonecode/jsondecode BIST tests.
Rik <rik@octave.org>
parents:
28760
diff
changeset
|
488 of the array. In particular, row vectors will be reshaped to column vectors. |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
489 |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
490 @item |
28753 | 491 Encoding and decoding is not guaranteed to preserve the Octave data type |
28750
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28657
diff
changeset
|
492 because JSON supports fewer data types than Octave. For example, if you |
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28657
diff
changeset
|
493 encode an @code{int8} and then decode it, you will get a @code{double}. |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
494 @end itemize |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
495 |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
496 This table shows the conversions from Octave data types to JSON data types: |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
497 |
28750
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28657
diff
changeset
|
498 @multitable @columnfractions 0.50 0.50 |
28753 | 499 @headitem Octave data type @tab JSON data type |
500 @item logical scalar @tab Boolean | |
501 @item logical vector @tab Array of Boolean, reshaped to row vector | |
502 @item logical array @tab nested Array of Boolean | |
503 @item numeric scalar @tab Number | |
28750
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28657
diff
changeset
|
504 @item numeric vector @tab Array of Number, reshaped to row vector |
28753 | 505 @item numeric array @tab nested Array of Number |
28750
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28657
diff
changeset
|
506 @item @code{NaN}, @code{NA}, @code{Inf}, @code{-Inf}@* |
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28657
diff
changeset
|
507 when @qcode{"ConvertInfAndNaN" = true} @tab @qcode{"null"} |
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28657
diff
changeset
|
508 @item @code{NaN}, @code{NA}, @code{Inf}, @code{-Inf}@* |
28753 | 509 when @qcode{"ConvertInfAndNaN" = false} @tab @qcode{"NaN"}, @qcode{"NaN"}, |
510 @qcode{"Infinity"}, @qcode{"-Infinity"} | |
28750
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28657
diff
changeset
|
511 @item empty array @tab @qcode{"[]"} |
28753 | 512 @item character vector @tab String |
513 @item character array @tab Array of String | |
28750
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28657
diff
changeset
|
514 @item empty character array @tab @qcode{""} |
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28657
diff
changeset
|
515 @item cell scalar @tab Array |
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28657
diff
changeset
|
516 @item cell vector @tab Array, reshaped to row vector |
28753 | 517 @item cell array @tab Array, flattened to row vector |
518 @item struct scalar @tab Object | |
28750
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28657
diff
changeset
|
519 @item struct vector @tab Array of Object, reshaped to row vector |
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28657
diff
changeset
|
520 @item struct array @tab nested Array of Object |
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28657
diff
changeset
|
521 @item classdef object @tab Object |
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28657
diff
changeset
|
522 @end multitable |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
523 |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
524 Examples: |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
525 |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
526 @example |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
527 @group |
28750
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28657
diff
changeset
|
528 jsonencode ([1, NaN; 3, 4]) |
28624
aae9d7f098bd
Support for RapidJSON 1.1.0 with jsonencode and jsondecode
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
28615
diff
changeset
|
529 @result{} [[1,null],[3,4]] |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
530 @end group |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
531 |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
532 @group |
28750
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28657
diff
changeset
|
533 jsonencode ([1, NaN; 3, 4], "ConvertInfAndNaN", false) |
28624
aae9d7f098bd
Support for RapidJSON 1.1.0 with jsonencode and jsondecode
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
28615
diff
changeset
|
534 @result{} [[1,NaN],[3,4]] |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
535 @end group |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
536 |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
537 @group |
28657
174550af014f
document and test escape characters in jsonencode
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
28624
diff
changeset
|
538 ## Escape characters inside a single-quoted string |
174550af014f
document and test escape characters in jsonencode
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
28624
diff
changeset
|
539 jsonencode ('\0\a\b\t\n\v\f\r') |
174550af014f
document and test escape characters in jsonencode
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
28624
diff
changeset
|
540 @result{} "\\0\\a\\b\\t\\n\\v\\f\\r" |
174550af014f
document and test escape characters in jsonencode
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
28624
diff
changeset
|
541 @end group |
174550af014f
document and test escape characters in jsonencode
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
28624
diff
changeset
|
542 |
174550af014f
document and test escape characters in jsonencode
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
28624
diff
changeset
|
543 @group |
174550af014f
document and test escape characters in jsonencode
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
28624
diff
changeset
|
544 ## Escape characters inside a double-quoted string |
174550af014f
document and test escape characters in jsonencode
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
28624
diff
changeset
|
545 jsonencode ("\a\b\t\n\v\f\r") |
174550af014f
document and test escape characters in jsonencode
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
28624
diff
changeset
|
546 @result{} "\u0007\b\t\n\u000B\f\r" |
174550af014f
document and test escape characters in jsonencode
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
28624
diff
changeset
|
547 @end group |
174550af014f
document and test escape characters in jsonencode
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
28624
diff
changeset
|
548 |
174550af014f
document and test escape characters in jsonencode
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
28624
diff
changeset
|
549 @group |
29449
3a680307d4aa
jsonencode.cc: Make pretty formating compatible with MATLAB (bug #60259).
Abdallah-Elshamy <abdallah.k.elshamy@gmail.com>
parents:
29359
diff
changeset
|
550 jsonencode ([true; false], "PrettyPrint", true) |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
551 @result{} ans = [ |
29449
3a680307d4aa
jsonencode.cc: Make pretty formating compatible with MATLAB (bug #60259).
Abdallah-Elshamy <abdallah.k.elshamy@gmail.com>
parents:
29359
diff
changeset
|
552 true, |
3a680307d4aa
jsonencode.cc: Make pretty formating compatible with MATLAB (bug #60259).
Abdallah-Elshamy <abdallah.k.elshamy@gmail.com>
parents:
29359
diff
changeset
|
553 false |
28624
aae9d7f098bd
Support for RapidJSON 1.1.0 with jsonencode and jsondecode
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
28615
diff
changeset
|
554 ] |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
555 @end group |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
556 |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
557 @group |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
558 jsonencode (['foo', 'bar'; 'foo', 'bar']) |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
559 @result{} ["foobar","foobar"] |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
560 @end group |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
561 |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
562 @group |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
563 jsonencode (struct ('a', Inf, 'b', [], 'c', struct ())) |
28624
aae9d7f098bd
Support for RapidJSON 1.1.0 with jsonencode and jsondecode
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
28615
diff
changeset
|
564 @result{} @{"a":null,"b":[],"c":@{@}@} |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
565 @end group |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
566 |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
567 @group |
28624
aae9d7f098bd
Support for RapidJSON 1.1.0 with jsonencode and jsondecode
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
28615
diff
changeset
|
568 jsonencode (struct ('structarray', struct ('a', @{1; 3@}, 'b', @{2; 4@}))) |
aae9d7f098bd
Support for RapidJSON 1.1.0 with jsonencode and jsondecode
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
28615
diff
changeset
|
569 @result{} @{"structarray":[@{"a":1,"b":2@},@{"a":3,"b":4@}]@} |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
570 @end group |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
571 |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
572 @group |
28624
aae9d7f098bd
Support for RapidJSON 1.1.0 with jsonencode and jsondecode
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
28615
diff
changeset
|
573 jsonencode (@{'foo'; 'bar'; @{'foo'; 'bar'@}@}) |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
574 @result{} ["foo","bar",["foo","bar"]] |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
575 @end group |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
576 |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
577 @group |
28624
aae9d7f098bd
Support for RapidJSON 1.1.0 with jsonencode and jsondecode
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
28615
diff
changeset
|
578 jsonencode (containers.Map(@{'foo'; 'bar'; 'baz'@}, [1, 2, 3])) |
aae9d7f098bd
Support for RapidJSON 1.1.0 with jsonencode and jsondecode
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
28615
diff
changeset
|
579 @result{} @{"bar":2,"baz":3,"foo":1@} |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
580 @end group |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
581 @end example |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
582 |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
583 @seealso{jsondecode} |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
584 @end deftypefn */) |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
585 { |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
586 #if defined (HAVE_RAPIDJSON) |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
587 |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
588 int nargin = args.length (); |
29449
3a680307d4aa
jsonencode.cc: Make pretty formating compatible with MATLAB (bug #60259).
Abdallah-Elshamy <abdallah.k.elshamy@gmail.com>
parents:
29359
diff
changeset
|
589 // jsonencode has two options 'ConvertInfAndNaN' and 'PrettyPrint' |
28750
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28657
diff
changeset
|
590 if (nargin != 1 && nargin != 3 && nargin != 5) |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
591 print_usage (); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
592 |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
593 // Initialize options with their default values |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
594 bool ConvertInfAndNaN = true; |
29449
3a680307d4aa
jsonencode.cc: Make pretty formating compatible with MATLAB (bug #60259).
Abdallah-Elshamy <abdallah.k.elshamy@gmail.com>
parents:
29359
diff
changeset
|
595 bool PrettyPrint = false; |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
596 |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
597 for (octave_idx_type i = 1; i < nargin; ++i) |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
598 { |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
599 if (! args(i).is_string ()) |
28750
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28657
diff
changeset
|
600 error ("jsonencode: option must be a string"); |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
601 if (! args(i+1).is_bool_scalar ()) |
28750
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28657
diff
changeset
|
602 error ("jsonencode: option value must be a logical scalar"); |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
603 |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
604 std::string option_name = args(i++).string_value (); |
29961
7d6709900da7
eliminate octave:: namespace tags in DEFUN and DEFMETHOD and more
John W. Eaton <jwe@octave.org>
parents:
29958
diff
changeset
|
605 if (string::strcmpi (option_name, "ConvertInfAndNaN")) |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
606 ConvertInfAndNaN = args(i).bool_value (); |
29961
7d6709900da7
eliminate octave:: namespace tags in DEFUN and DEFMETHOD and more
John W. Eaton <jwe@octave.org>
parents:
29958
diff
changeset
|
607 else if (string::strcmpi (option_name, "PrettyPrint")) |
29449
3a680307d4aa
jsonencode.cc: Make pretty formating compatible with MATLAB (bug #60259).
Abdallah-Elshamy <abdallah.k.elshamy@gmail.com>
parents:
29359
diff
changeset
|
608 PrettyPrint = args(i).bool_value (); |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
609 else |
28750
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28657
diff
changeset
|
610 error ("jsonencode: " |
29449
3a680307d4aa
jsonencode.cc: Make pretty formating compatible with MATLAB (bug #60259).
Abdallah-Elshamy <abdallah.k.elshamy@gmail.com>
parents:
29359
diff
changeset
|
611 R"(Valid options are "ConvertInfAndNaN" and "PrettyPrint")"); |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
612 } |
28624
aae9d7f098bd
Support for RapidJSON 1.1.0 with jsonencode and jsondecode
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
28615
diff
changeset
|
613 |
28751
699bba597610
Use specific configure test to detect RapidJSON PrettyWriter functionality (bug #59114)
Rik <rik@octave.org>
parents:
28750
diff
changeset
|
614 # if ! defined (HAVE_RAPIDJSON_PRETTYWRITER) |
29449
3a680307d4aa
jsonencode.cc: Make pretty formating compatible with MATLAB (bug #60259).
Abdallah-Elshamy <abdallah.k.elshamy@gmail.com>
parents:
29359
diff
changeset
|
615 if (PrettyPrint) |
28750
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28657
diff
changeset
|
616 { |
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28657
diff
changeset
|
617 warn_disabled_feature ("jsonencode", |
29449
3a680307d4aa
jsonencode.cc: Make pretty formating compatible with MATLAB (bug #60259).
Abdallah-Elshamy <abdallah.k.elshamy@gmail.com>
parents:
29359
diff
changeset
|
618 R"(the "PrettyPrint" option of RapidJSON)"); |
3a680307d4aa
jsonencode.cc: Make pretty formating compatible with MATLAB (bug #60259).
Abdallah-Elshamy <abdallah.k.elshamy@gmail.com>
parents:
29359
diff
changeset
|
619 PrettyPrint = false; |
28750
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28657
diff
changeset
|
620 } |
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28657
diff
changeset
|
621 # endif |
28624
aae9d7f098bd
Support for RapidJSON 1.1.0 with jsonencode and jsondecode
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
28615
diff
changeset
|
622 |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
623 rapidjson::StringBuffer json; |
29449
3a680307d4aa
jsonencode.cc: Make pretty formating compatible with MATLAB (bug #60259).
Abdallah-Elshamy <abdallah.k.elshamy@gmail.com>
parents:
29359
diff
changeset
|
624 if (PrettyPrint) |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
625 { |
28751
699bba597610
Use specific configure test to detect RapidJSON PrettyWriter functionality (bug #59114)
Rik <rik@octave.org>
parents:
28750
diff
changeset
|
626 # if defined (HAVE_RAPIDJSON_PRETTYWRITER) |
28750
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28657
diff
changeset
|
627 rapidjson::PrettyWriter<rapidjson::StringBuffer, rapidjson::UTF8<>, |
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28657
diff
changeset
|
628 rapidjson::UTF8<>, rapidjson::CrtAllocator, |
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28657
diff
changeset
|
629 rapidjson::kWriteNanAndInfFlag> writer (json); |
29449
3a680307d4aa
jsonencode.cc: Make pretty formating compatible with MATLAB (bug #60259).
Abdallah-Elshamy <abdallah.k.elshamy@gmail.com>
parents:
29359
diff
changeset
|
630 writer.SetIndent (' ', 2); |
28750
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28657
diff
changeset
|
631 encode (writer, args(0), ConvertInfAndNaN); |
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28657
diff
changeset
|
632 # endif |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
633 } |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
634 else |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
635 { |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
636 rapidjson::Writer<rapidjson::StringBuffer, rapidjson::UTF8<>, |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
637 rapidjson::UTF8<>, rapidjson::CrtAllocator, |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
638 rapidjson::kWriteNanAndInfFlag> writer (json); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
639 encode (writer, args(0), ConvertInfAndNaN); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
640 } |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
641 |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
642 return octave_value (json.GetString ()); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
643 |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
644 #else |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
645 |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
646 octave_unused_parameter (args); |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
647 |
28624
aae9d7f098bd
Support for RapidJSON 1.1.0 with jsonencode and jsondecode
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
28615
diff
changeset
|
648 err_disabled_feature ("jsonencode", "JSON encoding through RapidJSON"); |
28615
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
649 |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
650 #endif |
5da49e37a6c9
New functions jsondecode and jsonencode (bug #53100).
Abdallah Elshamy <abdallah.k.elshamy@gmail.com>
parents:
diff
changeset
|
651 } |
28750
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28657
diff
changeset
|
652 |
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28657
diff
changeset
|
653 /* |
28761
b5461b1dc0ca
Review jsonecode/jsondecode BIST tests.
Rik <rik@octave.org>
parents:
28760
diff
changeset
|
654 Functional BIST tests are located in test/json/jsonencode_BIST.tst |
28750
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28657
diff
changeset
|
655 |
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28657
diff
changeset
|
656 ## Input validation tests |
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28657
diff
changeset
|
657 %!testif HAVE_RAPIDJSON |
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28657
diff
changeset
|
658 %! fail ("jsonencode ()"); |
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28657
diff
changeset
|
659 %! fail ("jsonencode (1, 2)"); |
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28657
diff
changeset
|
660 %! fail ("jsonencode (1, 2, 3, 4)"); |
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28657
diff
changeset
|
661 %! fail ("jsonencode (1, 2, 3, 4, 5, 6)"); |
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28657
diff
changeset
|
662 %! fail ("jsonencode (1, 2, true)", "option must be a string"); |
28761
b5461b1dc0ca
Review jsonecode/jsondecode BIST tests.
Rik <rik@octave.org>
parents:
28760
diff
changeset
|
663 %! fail ("jsonencode (1, 'string', ones (2,2))", ... |
b5461b1dc0ca
Review jsonecode/jsondecode BIST tests.
Rik <rik@octave.org>
parents:
28760
diff
changeset
|
664 %! "option value must be a logical scalar"); |
b5461b1dc0ca
Review jsonecode/jsondecode BIST tests.
Rik <rik@octave.org>
parents:
28760
diff
changeset
|
665 %! fail ("jsonencode (1, 'foobar', true)", ... |
b5461b1dc0ca
Review jsonecode/jsondecode BIST tests.
Rik <rik@octave.org>
parents:
28760
diff
changeset
|
666 %! 'Valid options are "ConvertInfAndNaN"'); |
28750
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28657
diff
changeset
|
667 |
28751
699bba597610
Use specific configure test to detect RapidJSON PrettyWriter functionality (bug #59114)
Rik <rik@octave.org>
parents:
28750
diff
changeset
|
668 %!testif HAVE_RAPIDJSON; ! __have_feature__ ("RAPIDJSON_PRETTYWRITER") |
29449
3a680307d4aa
jsonencode.cc: Make pretty formating compatible with MATLAB (bug #60259).
Abdallah-Elshamy <abdallah.k.elshamy@gmail.com>
parents:
29359
diff
changeset
|
669 %! fail ("jsonencode (1, 'PrettyPrint', true)", ... |
3a680307d4aa
jsonencode.cc: Make pretty formating compatible with MATLAB (bug #60259).
Abdallah-Elshamy <abdallah.k.elshamy@gmail.com>
parents:
29359
diff
changeset
|
670 %! "warning", 'the "PrettyPrint" option of RapidJSON was unavailable'); |
28750
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28657
diff
changeset
|
671 |
80857685105b
Code review for jsonencode/jsondecode functions.
Rik <rik@octave.org>
parents:
28657
diff
changeset
|
672 */ |
29958
32c3a5805893
move DEFUN and DEFMETHOD functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
29956
diff
changeset
|
673 |
31605
e88a07dec498
maint: Use macros to begin/end C++ namespaces.
Rik <rik@octave.org>
parents:
30564
diff
changeset
|
674 OCTAVE_END_NAMESPACE(octave) |