/ Hex Artifact Content
Login

Artifact e8b50fbcdbf283cfafbc42632bf2c7dfa4541c46:


0000: 23 20 32 30 31 35 2d 30 38 2d 31 32 0a 23 0a 23  # 2015-08-12.#.#
0010: 20 54 68 65 20 61 75 74 68 6f 72 20 64 69 73 63   The author disc
0020: 6c 61 69 6d 73 20 63 6f 70 79 72 69 67 68 74 20  laims copyright 
0030: 74 6f 20 74 68 69 73 20 73 6f 75 72 63 65 20 63  to this source c
0040: 6f 64 65 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f  ode.  In place o
0050: 66 0a 23 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69  f.# a legal noti
0060: 63 65 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c  ce, here is a bl
0070: 65 73 73 69 6e 67 3a 0a 23 0a 23 20 20 20 20 4d  essing:.#.#    M
0080: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
0090: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 23 20 20  nd not evil..#  
00a0: 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20 66    May you find f
00b0: 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20 79  orgiveness for y
00c0: 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72 67  ourself and forg
00d0: 69 76 65 20 6f 74 68 65 72 73 2e 0a 23 20 20 20  ive others..#   
00e0: 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65 20 66   May you share f
00f0: 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74 61 6b  reely, never tak
0100: 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20 79 6f  ing more than yo
0110: 75 20 67 69 76 65 2e 0a 23 0a 23 2a 2a 2a 2a 2a  u give..#.#*****
0120: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 0a 23 20 54 68 69 73 20 66 69 6c 65 20 69  **.# This file i
0170: 6d 70 6c 65 6d 65 6e 74 73 20 74 65 73 74 73 20  mplements tests 
0180: 66 6f 72 20 4a 53 4f 4e 20 53 51 4c 20 66 75 6e  for JSON SQL fun
0190: 63 74 69 6f 6e 73 20 65 78 74 65 6e 73 69 6f 6e  ctions extension
01a0: 20 74 6f 20 74 68 65 0a 23 20 53 51 4c 69 74 65   to the.# SQLite
01b0: 20 6c 69 62 72 61 72 79 2e 0a 23 0a 0a 73 65 74   library..#..set
01c0: 20 74 65 73 74 64 69 72 20 5b 66 69 6c 65 20 64   testdir [file d
01d0: 69 72 6e 61 6d 65 20 24 61 72 67 76 30 5d 0a 73  irname $argv0].s
01e0: 6f 75 72 63 65 20 24 74 65 73 74 64 69 72 2f 74  ource $testdir/t
01f0: 65 73 74 65 72 2e 74 63 6c 0a 0a 6c 6f 61 64 5f  ester.tcl..load_
0200: 73 74 61 74 69 63 5f 65 78 74 65 6e 73 69 6f 6e  static_extension
0210: 20 64 62 20 6a 73 6f 6e 0a 64 6f 5f 65 78 65 63   db json.do_exec
0220: 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 31 30 31  sql_test json101
0230: 2d 31 2e 31 2e 30 30 20 7b 0a 20 20 53 45 4c 45  -1.1.00 {.  SELE
0240: 43 54 20 6a 73 6f 6e 5f 61 72 72 61 79 28 31 2c  CT json_array(1,
0250: 32 2e 35 2c 6e 75 6c 6c 2c 27 68 65 6c 6c 6f 27  2.5,null,'hello'
0260: 29 3b 0a 7d 20 7b 5b 31 2c 32 2e 35 2c 6e 75 6c  );.} {[1,2.5,nul
0270: 6c 2c 22 68 65 6c 6c 6f 22 5d 7d 0a 64 6f 5f 65  l,"hello"]}.do_e
0280: 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e  xecsql_test json
0290: 31 30 31 2d 31 2e 31 2e 30 31 20 7b 0a 20 20 53  101-1.1.01 {.  S
02a0: 45 4c 45 43 54 20 6a 73 6f 6e 5f 61 72 72 61 79  ELECT json_array
02b0: 28 31 2c 27 7b 22 61 62 63 22 3a 32 2e 35 2c 22  (1,'{"abc":2.5,"
02c0: 64 65 66 22 3a 6e 75 6c 6c 2c 22 67 68 69 22 3a  def":null,"ghi":
02d0: 68 65 6c 6c 6f 7d 27 2c 39 39 29 3b 0a 20 20 2d  hello}',99);.  -
02e0: 2d 20 74 68 65 20 73 65 63 6f 6e 64 20 74 65 72  - the second ter
02f0: 6d 20 67 6f 65 73 20 69 6e 20 61 73 20 61 20 73  m goes in as a s
0300: 74 72 69 6e 67 3a 0a 7d 20 7b 5b 31 2c 22 7b 5c  tring:.} {[1,"{\
0310: 5c 22 61 62 63 5c 5c 22 3a 32 2e 35 2c 5c 5c 22  \"abc\\":2.5,\\"
0320: 64 65 66 5c 5c 22 3a 6e 75 6c 6c 2c 5c 5c 22 67  def\\":null,\\"g
0330: 68 69 5c 5c 22 3a 68 65 6c 6c 6f 7d 22 2c 39 39  hi\\":hello}",99
0340: 5d 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  ]}.do_execsql_te
0350: 73 74 20 6a 73 6f 6e 31 30 31 2d 31 2e 31 2e 30  st json101-1.1.0
0360: 32 20 7b 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f  2 {.  SELECT jso
0370: 6e 5f 61 72 72 61 79 28 31 2c 6a 73 6f 6e 28 27  n_array(1,json('
0380: 7b 22 61 62 63 22 3a 32 2e 35 2c 22 64 65 66 22  {"abc":2.5,"def"
0390: 3a 6e 75 6c 6c 2c 22 67 68 69 22 3a 22 68 65 6c  :null,"ghi":"hel
03a0: 6c 6f 22 7d 27 29 2c 39 39 29 3b 0a 20 20 2d 2d  lo"}'),99);.  --
03b0: 20 74 68 65 20 73 65 63 6f 6e 64 20 74 65 72 6d   the second term
03c0: 20 67 6f 65 73 20 69 6e 20 61 73 20 4a 53 4f 4e   goes in as JSON
03d0: 0a 7d 20 7b 5b 31 2c 7b 22 61 62 63 22 3a 32 2e  .} {[1,{"abc":2.
03e0: 35 2c 22 64 65 66 22 3a 6e 75 6c 6c 2c 22 67 68  5,"def":null,"gh
03f0: 69 22 3a 22 68 65 6c 6c 6f 22 7d 2c 39 39 5d 7d  i":"hello"},99]}
0400: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
0410: 20 6a 73 6f 6e 31 30 31 2d 31 2e 31 2e 30 33 20   json101-1.1.03 
0420: 7b 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e 5f  {.  SELECT json_
0430: 61 72 72 61 79 28 31 2c 6a 73 6f 6e 5f 6f 62 6a  array(1,json_obj
0440: 65 63 74 28 27 61 62 63 27 2c 32 2e 35 2c 27 64  ect('abc',2.5,'d
0450: 65 66 27 2c 6e 75 6c 6c 2c 27 67 68 69 27 2c 27  ef',null,'ghi','
0460: 68 65 6c 6c 6f 27 29 2c 39 39 29 3b 0a 20 20 2d  hello'),99);.  -
0470: 2d 20 74 68 65 20 73 65 63 6f 6e 64 20 74 65 72  - the second ter
0480: 6d 20 67 6f 65 73 20 69 6e 20 61 73 20 4a 53 4f  m goes in as JSO
0490: 4e 0a 7d 20 7b 5b 31 2c 7b 22 61 62 63 22 3a 32  N.} {[1,{"abc":2
04a0: 2e 35 2c 22 64 65 66 22 3a 6e 75 6c 6c 2c 22 67  .5,"def":null,"g
04b0: 68 69 22 3a 22 68 65 6c 6c 6f 22 7d 2c 39 39 5d  hi":"hello"},99]
04c0: 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  }.do_execsql_tes
04d0: 74 20 6a 73 6f 6e 31 30 31 2d 31 2e 32 20 7b 0a  t json101-1.2 {.
04e0: 20 20 53 45 4c 45 43 54 20 68 65 78 28 6a 73 6f    SELECT hex(jso
04f0: 6e 5f 61 72 72 61 79 28 27 53 74 72 69 6e 67 20  n_array('String 
0500: 22 5c 20 54 65 73 74 27 29 29 3b 0a 7d 20 7b 35  "\ Test'));.} {5
0510: 42 32 32 35 33 37 34 37 32 36 39 36 45 36 37 32  B22537472696E672
0520: 30 35 43 32 32 35 43 35 43 32 30 35 34 36 35 37  05C225C5C2054657
0530: 33 37 34 32 32 35 44 7d 0a 64 6f 5f 63 61 74 63  374225D}.do_catc
0540: 68 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 31 30  hsql_test json10
0550: 31 2d 31 2e 33 20 7b 0a 20 20 53 45 4c 45 43 54  1-1.3 {.  SELECT
0560: 20 6a 73 6f 6e 5f 61 72 72 61 79 28 31 2c 70 72   json_array(1,pr
0570: 69 6e 74 66 28 27 25 2e 31 30 30 30 63 27 2c 27  intf('%.1000c','
0580: 78 27 29 2c 78 27 61 62 63 64 27 2c 33 29 3b 0a  x'),x'abcd',3);.
0590: 7d 20 7b 31 20 7b 4a 53 4f 4e 20 63 61 6e 6e 6f  } {1 {JSON canno
05a0: 74 20 68 6f 6c 64 20 42 4c 4f 42 20 76 61 6c 75  t hold BLOB valu
05b0: 65 73 7d 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f  es}}.do_execsql_
05c0: 74 65 73 74 20 6a 73 6f 6e 31 30 31 2d 31 2e 34  test json101-1.4
05d0: 20 7b 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e   {.  SELECT json
05e0: 5f 61 72 72 61 79 28 2d 39 32 32 33 33 37 32 30  _array(-92233720
05f0: 33 36 38 35 34 37 37 35 38 30 38 2c 39 32 32 33  36854775808,9223
0600: 33 37 32 30 33 36 38 35 34 37 37 35 38 30 37 2c  372036854775807,
0610: 30 2c 31 2c 2d 31 2c 0a 20 20 20 20 20 20 20 20  0,1,-1,.        
0620: 20 20 20 20 20 20 20 20 20 20 20 20 30 2e 30 2c              0.0,
0630: 20 31 2e 30 2c 20 2d 31 2e 30 2c 20 2d 31 65 39   1.0, -1.0, -1e9
0640: 39 2c 20 2b 32 65 31 30 30 2c 0a 20 20 20 20 20  9, +2e100,.     
0650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 27                 '
0660: 6f 6e 65 27 2c 27 74 77 6f 27 2c 27 74 68 72 65  one','two','thre
0670: 65 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  e',.            
0680: 20 20 20 20 20 20 20 20 34 2c 20 35 2c 20 36 2c          4, 5, 6,
0690: 20 37 2c 20 38 2c 20 39 2c 20 31 30 2c 20 31 31   7, 8, 9, 10, 11
06a0: 2c 20 31 32 2c 20 31 33 2c 20 31 34 2c 20 31 35  , 12, 13, 14, 15
06b0: 2c 20 31 36 2c 20 31 37 2c 20 31 38 2c 0a 20 20  , 16, 17, 18,.  
06c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
06d0: 20 20 31 39 2c 20 4e 55 4c 4c 2c 20 32 31 2c 20    19, NULL, 21, 
06e0: 32 32 2c 20 32 33 2c 20 32 34 2c 20 32 35 2c 20  22, 23, 24, 25, 
06f0: 32 36 2c 20 32 37 2c 20 32 38 2c 20 32 39 2c 20  26, 27, 28, 29, 
0700: 33 30 2c 20 33 31 2c 0a 20 20 20 20 20 20 20 20  30, 31,.        
0710: 20 20 20 20 20 20 20 20 20 20 20 20 27 61 62 63              'abc
0720: 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73  defghijklmnopqrs
0730: 74 75 76 77 79 78 7a 41 42 43 44 45 46 47 48 49  tuvwyxzABCDEFGHI
0740: 4a 4b 4c 4d 4e 4f 50 51 52 53 54 55 56 57 58 59  JKLMNOPQRSTUVWXY
0750: 5a 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  Z',.            
0760: 20 20 20 20 20 20 20 20 27 61 62 63 64 65 66 67          'abcdefg
0770: 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 77  hijklmnopqrstuvw
0780: 79 78 7a 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d  yxzABCDEFGHIJKLM
0790: 4e 4f 50 51 52 53 54 55 56 57 58 59 5a 27 2c 0a  NOPQRSTUVWXYZ',.
07a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
07b0: 20 20 20 20 27 61 62 63 64 65 66 67 68 69 6a 6b      'abcdefghijk
07c0: 6c 6d 6e 6f 70 71 72 73 74 75 76 77 79 78 7a 41  lmnopqrstuvwyxzA
07d0: 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f 50 51  BCDEFGHIJKLMNOPQ
07e0: 52 53 54 55 56 57 58 59 5a 27 2c 0a 20 20 20 20  RSTUVWXYZ',.    
07f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0800: 39 39 29 3b 0a 7d 20 7b 5b 2d 39 32 32 33 33 37  99);.} {[-922337
0810: 32 30 33 36 38 35 34 37 37 35 38 30 38 2c 39 32  2036854775808,92
0820: 32 33 33 37 32 30 33 36 38 35 34 37 37 35 38 30  2337203685477580
0830: 37 2c 30 2c 31 2c 2d 31 2c 30 2e 30 2c 31 2e 30  7,0,1,-1,0.0,1.0
0840: 2c 2d 31 2e 30 2c 2d 31 2e 30 65 2b 39 39 2c 32  ,-1.0,-1.0e+99,2
0850: 2e 30 65 2b 31 30 30 2c 22 6f 6e 65 22 2c 22 74  .0e+100,"one","t
0860: 77 6f 22 2c 22 74 68 72 65 65 22 2c 34 2c 35 2c  wo","three",4,5,
0870: 36 2c 37 2c 38 2c 39 2c 31 30 2c 31 31 2c 31 32  6,7,8,9,10,11,12
0880: 2c 31 33 2c 31 34 2c 31 35 2c 31 36 2c 31 37 2c  ,13,14,15,16,17,
0890: 31 38 2c 31 39 2c 6e 75 6c 6c 2c 32 31 2c 32 32  18,19,null,21,22
08a0: 2c 32 33 2c 32 34 2c 32 35 2c 32 36 2c 32 37 2c  ,23,24,25,26,27,
08b0: 32 38 2c 32 39 2c 33 30 2c 33 31 2c 22 61 62 63  28,29,30,31,"abc
08c0: 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73  defghijklmnopqrs
08d0: 74 75 76 77 79 78 7a 41 42 43 44 45 46 47 48 49  tuvwyxzABCDEFGHI
08e0: 4a 4b 4c 4d 4e 4f 50 51 52 53 54 55 56 57 58 59  JKLMNOPQRSTUVWXY
08f0: 5a 22 2c 22 61 62 63 64 65 66 67 68 69 6a 6b 6c  Z","abcdefghijkl
0900: 6d 6e 6f 70 71 72 73 74 75 76 77 79 78 7a 41 42  mnopqrstuvwyxzAB
0910: 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f 50 51 52  CDEFGHIJKLMNOPQR
0920: 53 54 55 56 57 58 59 5a 22 2c 22 61 62 63 64 65  STUVWXYZ","abcde
0930: 66 67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75  fghijklmnopqrstu
0940: 76 77 79 78 7a 41 42 43 44 45 46 47 48 49 4a 4b  vwyxzABCDEFGHIJK
0950: 4c 4d 4e 4f 50 51 52 53 54 55 56 57 58 59 5a 22  LMNOPQRSTUVWXYZ"
0960: 2c 39 39 5d 7d 0a 0a 64 6f 5f 65 78 65 63 73 71  ,99]}..do_execsq
0970: 6c 5f 74 65 73 74 20 6a 73 6f 6e 31 30 31 2d 32  l_test json101-2
0980: 2e 31 20 7b 0a 20 20 53 45 4c 45 43 54 20 6a 73  .1 {.  SELECT js
0990: 6f 6e 5f 6f 62 6a 65 63 74 28 27 61 27 2c 31 2c  on_object('a',1,
09a0: 27 62 27 2c 32 2e 35 2c 27 63 27 2c 6e 75 6c 6c  'b',2.5,'c',null
09b0: 2c 27 64 27 2c 27 53 74 72 69 6e 67 20 54 65 73  ,'d','String Tes
09c0: 74 27 29 3b 0a 7d 20 7b 7b 7b 22 61 22 3a 31 2c  t');.} {{{"a":1,
09d0: 22 62 22 3a 32 2e 35 2c 22 63 22 3a 6e 75 6c 6c  "b":2.5,"c":null
09e0: 2c 22 64 22 3a 22 53 74 72 69 6e 67 20 54 65 73  ,"d":"String Tes
09f0: 74 22 7d 7d 7d 0a 64 6f 5f 63 61 74 63 68 73 71  t"}}}.do_catchsq
0a00: 6c 5f 74 65 73 74 20 6a 73 6f 6e 31 30 31 2d 32  l_test json101-2
0a10: 2e 32 20 7b 0a 20 20 53 45 4c 45 43 54 20 6a 73  .2 {.  SELECT js
0a20: 6f 6e 5f 6f 62 6a 65 63 74 28 27 61 27 2c 70 72  on_object('a',pr
0a30: 69 6e 74 66 28 27 25 2e 31 30 30 30 63 27 2c 27  intf('%.1000c','
0a40: 78 27 29 2c 32 2c 32 2e 35 29 3b 0a 7d 20 7b 31  x'),2,2.5);.} {1
0a50: 20 7b 6a 73 6f 6e 5f 6f 62 6a 65 63 74 28 29 20   {json_object() 
0a60: 6c 61 62 65 6c 73 20 6d 75 73 74 20 62 65 20 54  labels must be T
0a70: 45 58 54 7d 7d 0a 64 6f 5f 63 61 74 63 68 73 71  EXT}}.do_catchsq
0a80: 6c 5f 74 65 73 74 20 6a 73 6f 6e 31 30 31 2d 32  l_test json101-2
0a90: 2e 33 20 7b 0a 20 20 53 45 4c 45 43 54 20 6a 73  .3 {.  SELECT js
0aa0: 6f 6e 5f 6f 62 6a 65 63 74 28 27 61 27 2c 31 2c  on_object('a',1,
0ab0: 27 62 27 29 3b 0a 7d 20 7b 31 20 7b 6a 73 6f 6e  'b');.} {1 {json
0ac0: 5f 6f 62 6a 65 63 74 28 29 20 72 65 71 75 69 72  _object() requir
0ad0: 65 73 20 61 6e 20 65 76 65 6e 20 6e 75 6d 62 65  es an even numbe
0ae0: 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 7d 7d  r of arguments}}
0af0: 0a 64 6f 5f 63 61 74 63 68 73 71 6c 5f 74 65 73  .do_catchsql_tes
0b00: 74 20 6a 73 6f 6e 31 30 31 2d 32 2e 34 20 7b 0a  t json101-2.4 {.
0b10: 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e 5f 6f 62    SELECT json_ob
0b20: 6a 65 63 74 28 27 61 27 2c 70 72 69 6e 74 66 28  ject('a',printf(
0b30: 27 25 2e 31 30 30 30 63 27 2c 27 78 27 29 2c 27  '%.1000c','x'),'
0b40: 62 27 2c 78 27 61 62 63 64 27 29 3b 0a 7d 20 7b  b',x'abcd');.} {
0b50: 31 20 7b 4a 53 4f 4e 20 63 61 6e 6e 6f 74 20 68  1 {JSON cannot h
0b60: 6f 6c 64 20 42 4c 4f 42 20 76 61 6c 75 65 73 7d  old BLOB values}
0b70: 7d 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  }..do_execsql_te
0b80: 73 74 20 6a 73 6f 6e 31 30 31 2d 33 2e 31 20 7b  st json101-3.1 {
0b90: 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e 5f 72  .  SELECT json_r
0ba0: 65 70 6c 61 63 65 28 27 7b 22 61 22 3a 31 2c 22  eplace('{"a":1,"
0bb0: 62 22 3a 32 7d 27 2c 27 24 2e 61 27 2c 27 5b 33  b":2}','$.a','[3
0bc0: 2c 34 2c 35 5d 27 29 3b 0a 7d 20 7b 7b 7b 22 61  ,4,5]');.} {{{"a
0bd0: 22 3a 22 5b 33 2c 34 2c 35 5d 22 2c 22 62 22 3a  ":"[3,4,5]","b":
0be0: 32 7d 7d 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f  2}}}.do_execsql_
0bf0: 74 65 73 74 20 6a 73 6f 6e 31 30 31 2d 33 2e 32  test json101-3.2
0c00: 20 7b 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e   {.  SELECT json
0c10: 5f 72 65 70 6c 61 63 65 28 27 7b 22 61 22 3a 31  _replace('{"a":1
0c20: 2c 22 62 22 3a 32 7d 27 2c 27 24 2e 61 27 2c 6a  ,"b":2}','$.a',j
0c30: 73 6f 6e 28 27 5b 33 2c 34 2c 35 5d 27 29 29 3b  son('[3,4,5]'));
0c40: 0a 7d 20 7b 7b 7b 22 61 22 3a 5b 33 2c 34 2c 35  .} {{{"a":[3,4,5
0c50: 5d 2c 22 62 22 3a 32 7d 7d 7d 0a 64 6f 5f 65 78  ],"b":2}}}.do_ex
0c60: 65 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 31  ecsql_test json1
0c70: 30 31 2d 33 2e 33 20 7b 0a 20 20 53 45 4c 45 43  01-3.3 {.  SELEC
0c80: 54 20 6a 73 6f 6e 5f 74 79 70 65 28 6a 73 6f 6e  T json_type(json
0c90: 5f 73 65 74 28 27 7b 22 61 22 3a 31 2c 22 62 22  _set('{"a":1,"b"
0ca0: 3a 32 7d 27 2c 27 24 2e 62 27 2c 27 7b 22 78 22  :2}','$.b','{"x"
0cb0: 3a 33 2c 22 79 22 3a 34 7d 27 29 2c 27 24 2e 62  :3,"y":4}'),'$.b
0cc0: 27 29 3b 0a 7d 20 7b 74 65 78 74 7d 0a 64 6f 5f  ');.} {text}.do_
0cd0: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f  execsql_test jso
0ce0: 6e 31 30 31 2d 33 2e 34 20 7b 0a 20 20 53 45 4c  n101-3.4 {.  SEL
0cf0: 45 43 54 20 6a 73 6f 6e 5f 74 79 70 65 28 6a 73  ECT json_type(js
0d00: 6f 6e 5f 73 65 74 28 27 7b 22 61 22 3a 31 2c 22  on_set('{"a":1,"
0d10: 62 22 3a 32 7d 27 2c 27 24 2e 62 27 2c 6a 73 6f  b":2}','$.b',jso
0d20: 6e 28 27 7b 22 78 22 3a 33 2c 22 79 22 3a 34 7d  n('{"x":3,"y":4}
0d30: 27 29 29 2c 27 24 2e 62 27 29 3b 0a 7d 20 7b 6f  ')),'$.b');.} {o
0d40: 62 6a 65 63 74 7d 0a 69 66 63 61 70 61 62 6c 65  bject}.ifcapable
0d50: 20 76 74 61 62 20 7b 0a 64 6f 5f 65 78 65 63 73   vtab {.do_execs
0d60: 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 31 30 31 2d  ql_test json101-
0d70: 33 2e 35 20 7b 0a 20 20 53 45 4c 45 43 54 20 66  3.5 {.  SELECT f
0d80: 75 6c 6c 6b 65 79 2c 20 61 74 6f 6d 2c 20 27 7c  ullkey, atom, '|
0d90: 27 20 46 52 4f 4d 20 6a 73 6f 6e 5f 74 72 65 65  ' FROM json_tree
0da0: 28 6a 73 6f 6e 5f 73 65 74 28 27 7b 7d 27 2c 27  (json_set('{}','
0db0: 24 2e 78 27 2c 31 32 33 2c 27 24 2e 78 27 2c 34  $.x',123,'$.x',4
0dc0: 35 36 29 29 3b 0a 7d 20 7b 7b 24 7d 20 7b 7d 20  56));.} {{$} {} 
0dd0: 7c 20 7b 24 2e 78 7d 20 34 35 36 20 7c 7d 0a 7d  | {$.x} 456 |}.}
0de0: 0a 0a 23 20 50 65 72 20 72 66 63 37 31 35 39 2c  ..# Per rfc7159,
0df0: 20 61 6e 79 20 4a 53 4f 4e 20 76 61 6c 75 65 20   any JSON value 
0e00: 69 73 20 61 6c 6c 6f 77 65 64 20 61 74 20 74 68  is allowed at th
0e10: 65 20 74 6f 70 20 6c 65 76 65 6c 2c 20 61 6e 64  e top level, and
0e20: 20 77 68 69 74 65 73 70 61 63 65 0a 23 20 69 73   whitespace.# is
0e30: 20 70 65 72 6d 69 74 74 69 6e 67 20 62 65 66 6f   permitting befo
0e40: 72 65 20 61 6e 64 2f 6f 72 20 61 66 74 65 72 20  re and/or after 
0e50: 74 68 61 74 20 76 61 6c 75 65 2e 0a 23 0a 64 6f  that value..#.do
0e60: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73  _execsql_test js
0e70: 6f 6e 31 30 31 2d 34 2e 31 20 7b 0a 20 20 43 52  on101-4.1 {.  CR
0e80: 45 41 54 45 20 54 41 42 4c 45 20 6a 31 28 78 29  EATE TABLE j1(x)
0e90: 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  ;.  INSERT INTO 
0ea0: 6a 31 28 78 29 0a 20 20 20 56 41 4c 55 45 53 28  j1(x).   VALUES(
0eb0: 27 74 72 75 65 27 29 2c 28 27 66 61 6c 73 65 27  'true'),('false'
0ec0: 29 2c 28 27 6e 75 6c 6c 27 29 2c 28 27 31 32 33  ),('null'),('123
0ed0: 27 29 2c 28 27 2d 32 33 34 27 29 2c 28 27 33 34  '),('-234'),('34
0ee0: 2e 35 65 2b 36 27 29 2c 0a 20 20 20 20 20 20 20  .5e+6'),.       
0ef0: 20 20 28 27 22 22 27 29 2c 28 27 22 5c 22 22 27    ('""'),('"\""'
0f00: 29 2c 28 27 22 5c 5c 22 27 29 2c 28 27 22 61 62  ),('"\\"'),('"ab
0f10: 63 64 65 66 67 68 69 6a 6c 6d 6e 6f 70 71 72 73  cdefghijlmnopqrs
0f20: 74 75 76 77 78 79 7a 22 27 29 2c 0a 20 20 20 20  tuvwxyz"'),.    
0f30: 20 20 20 20 20 28 27 5b 5d 27 29 2c 28 27 7b 7d       ('[]'),('{}
0f40: 27 29 2c 28 27 5b 74 72 75 65 2c 66 61 6c 73 65  '),('[true,false
0f50: 2c 6e 75 6c 6c 2c 31 32 33 2c 2d 32 33 34 2c 33  ,null,123,-234,3
0f60: 34 2e 35 65 2b 36 2c 7b 7d 2c 5b 5d 5d 27 29 2c  4.5e+6,{},[]]'),
0f70: 0a 20 20 20 20 20 20 20 20 20 28 27 7b 22 61 22  .         ('{"a"
0f80: 3a 74 72 75 65 2c 22 62 22 3a 7b 22 63 22 3a 66  :true,"b":{"c":f
0f90: 61 6c 73 65 7d 7d 27 29 3b 0a 20 20 53 45 4c 45  alse}}');.  SELE
0fa0: 43 54 20 2a 20 46 52 4f 4d 20 6a 31 20 57 48 45  CT * FROM j1 WHE
0fb0: 52 45 20 4e 4f 54 20 6a 73 6f 6e 5f 76 61 6c 69  RE NOT json_vali
0fc0: 64 28 78 29 3b 0a 7d 20 7b 7d 0a 64 6f 5f 65 78  d(x);.} {}.do_ex
0fd0: 65 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 31  ecsql_test json1
0fe0: 30 31 2d 34 2e 32 20 7b 0a 20 20 53 45 4c 45 43  01-4.2 {.  SELEC
0ff0: 54 20 2a 20 46 52 4f 4d 20 6a 31 20 57 48 45 52  T * FROM j1 WHER
1000: 45 20 4e 4f 54 20 6a 73 6f 6e 5f 76 61 6c 69 64  E NOT json_valid
1010: 28 63 68 61 72 28 30 78 32 30 2c 30 78 30 39 2c  (char(0x20,0x09,
1020: 30 78 30 61 2c 30 78 30 64 29 7c 7c 78 29 3b 0a  0x0a,0x0d)||x);.
1030: 7d 20 7b 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f  } {}.do_execsql_
1040: 74 65 73 74 20 6a 73 6f 6e 31 30 31 2d 34 2e 33  test json101-4.3
1050: 20 7b 0a 20 20 53 45 4c 45 43 54 20 2a 20 46 52   {.  SELECT * FR
1060: 4f 4d 20 6a 31 20 57 48 45 52 45 20 4e 4f 54 20  OM j1 WHERE NOT 
1070: 6a 73 6f 6e 5f 76 61 6c 69 64 28 78 7c 7c 63 68  json_valid(x||ch
1080: 61 72 28 30 78 32 30 2c 30 78 30 39 2c 30 78 30  ar(0x20,0x09,0x0
1090: 61 2c 30 78 30 64 29 29 3b 0a 7d 20 7b 7d 0a 0a  a,0x0d));.} {}..
10a0: 23 20 42 75 74 20 61 6e 20 65 6d 70 74 79 20 73  # But an empty s
10b0: 74 72 69 6e 67 2c 20 6f 72 20 61 20 73 74 72 69  tring, or a stri
10c0: 6e 67 20 6f 66 20 70 75 72 65 20 77 68 69 74 65  ng of pure white
10d0: 73 70 61 63 65 20 69 73 20 6e 6f 74 20 76 61 6c  space is not val
10e0: 69 64 20 4a 53 4f 4e 2e 0a 23 0a 64 6f 5f 65 78  id JSON..#.do_ex
10f0: 65 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 31  ecsql_test json1
1100: 30 31 2d 34 2e 34 20 7b 0a 20 20 53 45 4c 45 43  01-4.4 {.  SELEC
1110: 54 20 6a 73 6f 6e 5f 76 61 6c 69 64 28 27 27 29  T json_valid('')
1120: 2c 20 6a 73 6f 6e 5f 76 61 6c 69 64 28 63 68 61  , json_valid(cha
1130: 72 28 30 78 32 30 2c 30 78 30 39 2c 30 78 30 61  r(0x20,0x09,0x0a
1140: 2c 30 78 30 64 29 29 3b 0a 7d 20 7b 30 20 30 7d  ,0x0d));.} {0 0}
1150: 0a 0a 23 20 6a 73 6f 6e 5f 72 65 6d 6f 76 65 28  ..# json_remove(
1160: 29 20 61 6e 64 20 73 69 6d 69 6c 61 72 20 66 75  ) and similar fu
1170: 6e 63 74 69 6f 6e 73 20 77 69 74 68 20 6e 6f 20  nctions with no 
1180: 65 64 69 74 20 6f 70 65 72 61 74 69 6f 6e 73 20  edit operations 
1190: 72 65 74 75 72 6e 20 74 68 65 69 72 0a 23 20 69  return their.# i
11a0: 6e 70 75 74 20 75 6e 63 68 61 6e 67 65 64 2e 0a  nput unchanged..
11b0: 23 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  #.do_execsql_tes
11c0: 74 20 6a 73 6f 6e 31 30 31 2d 34 2e 35 20 7b 0a  t json101-4.5 {.
11d0: 20 20 53 45 4c 45 43 54 20 78 20 46 52 4f 4d 20    SELECT x FROM 
11e0: 6a 31 20 57 48 45 52 45 20 6a 73 6f 6e 5f 72 65  j1 WHERE json_re
11f0: 6d 6f 76 65 28 78 29 3c 3e 78 3b 0a 7d 20 7b 7d  move(x)<>x;.} {}
1200: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
1210: 20 6a 73 6f 6e 31 30 31 2d 34 2e 36 20 7b 0a 20   json101-4.6 {. 
1220: 20 53 45 4c 45 43 54 20 78 20 46 52 4f 4d 20 6a   SELECT x FROM j
1230: 31 20 57 48 45 52 45 20 6a 73 6f 6e 5f 72 65 70  1 WHERE json_rep
1240: 6c 61 63 65 28 78 29 3c 3e 78 3b 0a 7d 20 7b 7d  lace(x)<>x;.} {}
1250: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
1260: 20 6a 73 6f 6e 31 30 31 2d 34 2e 37 20 7b 0a 20   json101-4.7 {. 
1270: 20 53 45 4c 45 43 54 20 78 20 46 52 4f 4d 20 6a   SELECT x FROM j
1280: 31 20 57 48 45 52 45 20 6a 73 6f 6e 5f 73 65 74  1 WHERE json_set
1290: 28 78 29 3c 3e 78 3b 0a 7d 20 7b 7d 0a 64 6f 5f  (x)<>x;.} {}.do_
12a0: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f  execsql_test jso
12b0: 6e 31 30 31 2d 34 2e 38 20 7b 0a 20 20 53 45 4c  n101-4.8 {.  SEL
12c0: 45 43 54 20 78 20 46 52 4f 4d 20 6a 31 20 57 48  ECT x FROM j1 WH
12d0: 45 52 45 20 6a 73 6f 6e 5f 69 6e 73 65 72 74 28  ERE json_insert(
12e0: 78 29 3c 3e 78 3b 0a 7d 20 7b 7d 0a 0a 23 20 6a  x)<>x;.} {}..# j
12f0: 73 6f 6e 5f 65 78 74 72 61 63 74 28 4a 53 4f 4e  son_extract(JSON
1300: 2c 27 24 27 29 20 77 69 6c 6c 20 72 65 74 75 72  ,'$') will retur
1310: 6e 20 6f 62 6a 65 63 74 73 20 61 6e 64 20 61 72  n objects and ar
1320: 72 61 79 73 20 77 69 74 68 6f 75 74 20 63 68 61  rays without cha
1330: 6e 67 65 2e 0a 23 0a 64 6f 5f 65 78 65 63 73 71  nge..#.do_execsq
1340: 6c 5f 74 65 73 74 20 6a 73 6f 6e 2d 34 2e 31 30  l_test json-4.10
1350: 20 7b 0a 20 20 53 45 4c 45 43 54 20 63 6f 75 6e   {.  SELECT coun
1360: 74 28 2a 29 20 46 52 4f 4d 20 6a 31 20 57 48 45  t(*) FROM j1 WHE
1370: 52 45 20 6a 73 6f 6e 5f 74 79 70 65 28 78 29 20  RE json_type(x) 
1380: 49 4e 20 28 27 6f 62 6a 65 63 74 27 2c 27 61 72  IN ('object','ar
1390: 72 61 79 27 29 3b 0a 20 20 53 45 4c 45 43 54 20  ray');.  SELECT 
13a0: 78 20 46 52 4f 4d 20 6a 31 0a 20 20 20 57 48 45  x FROM j1.   WHE
13b0: 52 45 20 6a 73 6f 6e 5f 65 78 74 72 61 63 74 28  RE json_extract(
13c0: 78 2c 27 24 27 29 3c 3e 78 0a 20 20 20 20 20 41  x,'$')<>x.     A
13d0: 4e 44 20 6a 73 6f 6e 5f 74 79 70 65 28 78 29 20  ND json_type(x) 
13e0: 49 4e 20 28 27 6f 62 6a 65 63 74 27 2c 27 61 72  IN ('object','ar
13f0: 72 61 79 27 29 3b 0a 7d 20 7b 34 7d 0a 0a 64 6f  ray');.} {4}..do
1400: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73  _execsql_test js
1410: 6f 6e 2d 35 2e 31 20 7b 0a 20 20 43 52 45 41 54  on-5.1 {.  CREAT
1420: 45 20 54 41 42 4c 45 20 6a 32 28 69 64 20 49 4e  E TABLE j2(id IN
1430: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
1440: 59 2c 20 6a 73 6f 6e 2c 20 73 72 63 29 3b 0a 20  Y, json, src);. 
1450: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 6a 32 28   INSERT INTO j2(
1460: 69 64 2c 6a 73 6f 6e 2c 73 72 63 29 0a 20 20 56  id,json,src).  V
1470: 41 4c 55 45 53 28 31 2c 27 7b 0a 20 20 20 20 22  ALUES(1,'{.    "
1480: 66 69 72 73 74 4e 61 6d 65 22 3a 20 22 4a 6f 68  firstName": "Joh
1490: 6e 22 2c 0a 20 20 20 20 22 6c 61 73 74 4e 61 6d  n",.    "lastNam
14a0: 65 22 3a 20 22 53 6d 69 74 68 22 2c 0a 20 20 20  e": "Smith",.   
14b0: 20 22 69 73 41 6c 69 76 65 22 3a 20 74 72 75 65   "isAlive": true
14c0: 2c 0a 20 20 20 20 22 61 67 65 22 3a 20 32 35 2c  ,.    "age": 25,
14d0: 0a 20 20 20 20 22 61 64 64 72 65 73 73 22 3a 20  .    "address": 
14e0: 7b 0a 20 20 20 20 20 20 22 73 74 72 65 65 74 41  {.      "streetA
14f0: 64 64 72 65 73 73 22 3a 20 22 32 31 20 32 6e 64  ddress": "21 2nd
1500: 20 53 74 72 65 65 74 22 2c 0a 20 20 20 20 20 20   Street",.      
1510: 22 63 69 74 79 22 3a 20 22 4e 65 77 20 59 6f 72  "city": "New Yor
1520: 6b 22 2c 0a 20 20 20 20 20 20 22 73 74 61 74 65  k",.      "state
1530: 22 3a 20 22 4e 59 22 2c 0a 20 20 20 20 20 20 22  ": "NY",.      "
1540: 70 6f 73 74 61 6c 43 6f 64 65 22 3a 20 22 31 30  postalCode": "10
1550: 30 32 31 2d 33 31 30 30 22 0a 20 20 20 20 7d 2c  021-3100".    },
1560: 0a 20 20 20 20 22 70 68 6f 6e 65 4e 75 6d 62 65  .    "phoneNumbe
1570: 72 73 22 3a 20 5b 0a 20 20 20 20 20 20 7b 0a 20  rs": [.      {. 
1580: 20 20 20 20 20 20 20 22 74 79 70 65 22 3a 20 22         "type": "
1590: 68 6f 6d 65 22 2c 0a 20 20 20 20 20 20 20 20 22  home",.        "
15a0: 6e 75 6d 62 65 72 22 3a 20 22 32 31 32 20 35 35  number": "212 55
15b0: 35 2d 31 32 33 34 22 0a 20 20 20 20 20 20 7d 2c  5-1234".      },
15c0: 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20  .      {.       
15d0: 20 22 74 79 70 65 22 3a 20 22 6f 66 66 69 63 65   "type": "office
15e0: 22 2c 0a 20 20 20 20 20 20 20 20 22 6e 75 6d 62  ",.        "numb
15f0: 65 72 22 3a 20 22 36 34 36 20 35 35 35 2d 34 35  er": "646 555-45
1600: 36 37 22 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  67".      }.    
1610: 5d 2c 0a 20 20 20 20 22 63 68 69 6c 64 72 65 6e  ],.    "children
1620: 22 3a 20 5b 5d 2c 0a 20 20 20 20 22 73 70 6f 75  ": [],.    "spou
1630: 73 65 22 3a 20 6e 75 6c 6c 0a 20 20 7d 27 2c 27  se": null.  }','
1640: 68 74 74 70 73 3a 2f 2f 65 6e 2e 77 69 6b 69 70  https://en.wikip
1650: 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 4a 53  edia.org/wiki/JS
1660: 4f 4e 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49  ON');.  INSERT I
1670: 4e 54 4f 20 6a 32 28 69 64 2c 6a 73 6f 6e 2c 73  NTO j2(id,json,s
1680: 72 63 29 0a 20 20 56 41 4c 55 45 53 28 32 2c 20  rc).  VALUES(2, 
1690: 27 7b 0a 09 22 69 64 22 3a 20 22 30 30 30 31 22  '{.."id": "0001"
16a0: 2c 0a 09 22 74 79 70 65 22 3a 20 22 64 6f 6e 75  ,.."type": "donu
16b0: 74 22 2c 0a 09 22 6e 61 6d 65 22 3a 20 22 43 61  t",.."name": "Ca
16c0: 6b 65 22 2c 0a 09 22 70 70 75 22 3a 20 30 2e 35  ke",.."ppu": 0.5
16d0: 35 2c 0a 09 22 62 61 74 74 65 72 73 22 3a 0a 09  5,.."batters":..
16e0: 09 7b 0a 09 09 09 22 62 61 74 74 65 72 22 3a 0a  .{...."batter":.
16f0: 09 09 09 09 5b 0a 09 09 09 09 09 7b 20 22 69 64  ....[......{ "id
1700: 22 3a 20 22 31 30 30 31 22 2c 20 22 74 79 70 65  ": "1001", "type
1710: 22 3a 20 22 52 65 67 75 6c 61 72 22 20 7d 2c 0a  ": "Regular" },.
1720: 09 09 09 09 09 7b 20 22 69 64 22 3a 20 22 31 30  .....{ "id": "10
1730: 30 32 22 2c 20 22 74 79 70 65 22 3a 20 22 43 68  02", "type": "Ch
1740: 6f 63 6f 6c 61 74 65 22 20 7d 2c 0a 09 09 09 09  ocolate" },.....
1750: 09 7b 20 22 69 64 22 3a 20 22 31 30 30 33 22 2c  .{ "id": "1003",
1760: 20 22 74 79 70 65 22 3a 20 22 42 6c 75 65 62 65   "type": "Bluebe
1770: 72 72 79 22 20 7d 2c 0a 09 09 09 09 09 7b 20 22  rry" },......{ "
1780: 69 64 22 3a 20 22 31 30 30 34 22 2c 20 22 74 79  id": "1004", "ty
1790: 70 65 22 3a 20 22 44 65 76 69 6c 27 27 73 20 46  pe": "Devil''s F
17a0: 6f 6f 64 22 20 7d 0a 09 09 09 09 5d 0a 09 09 7d  ood" }.....]...}
17b0: 2c 0a 09 22 74 6f 70 70 69 6e 67 22 3a 0a 09 09  ,.."topping":...
17c0: 5b 0a 09 09 09 7b 20 22 69 64 22 3a 20 22 35 30  [....{ "id": "50
17d0: 30 31 22 2c 20 22 74 79 70 65 22 3a 20 22 4e 6f  01", "type": "No
17e0: 6e 65 22 20 7d 2c 0a 09 09 09 7b 20 22 69 64 22  ne" },....{ "id"
17f0: 3a 20 22 35 30 30 32 22 2c 20 22 74 79 70 65 22  : "5002", "type"
1800: 3a 20 22 47 6c 61 7a 65 64 22 20 7d 2c 0a 09 09  : "Glazed" },...
1810: 09 7b 20 22 69 64 22 3a 20 22 35 30 30 35 22 2c  .{ "id": "5005",
1820: 20 22 74 79 70 65 22 3a 20 22 53 75 67 61 72 22   "type": "Sugar"
1830: 20 7d 2c 0a 09 09 09 7b 20 22 69 64 22 3a 20 22   },....{ "id": "
1840: 35 30 30 37 22 2c 20 22 74 79 70 65 22 3a 20 22  5007", "type": "
1850: 50 6f 77 64 65 72 65 64 20 53 75 67 61 72 22 20  Powdered Sugar" 
1860: 7d 2c 0a 09 09 09 7b 20 22 69 64 22 3a 20 22 35  },....{ "id": "5
1870: 30 30 36 22 2c 20 22 74 79 70 65 22 3a 20 22 43  006", "type": "C
1880: 68 6f 63 6f 6c 61 74 65 20 77 69 74 68 20 53 70  hocolate with Sp
1890: 72 69 6e 6b 6c 65 73 22 20 7d 2c 0a 09 09 09 7b  rinkles" },....{
18a0: 20 22 69 64 22 3a 20 22 35 30 30 33 22 2c 20 22   "id": "5003", "
18b0: 74 79 70 65 22 3a 20 22 43 68 6f 63 6f 6c 61 74  type": "Chocolat
18c0: 65 22 20 7d 2c 0a 09 09 09 7b 20 22 69 64 22 3a  e" },....{ "id":
18d0: 20 22 35 30 30 34 22 2c 20 22 74 79 70 65 22 3a   "5004", "type":
18e0: 20 22 4d 61 70 6c 65 22 20 7d 0a 09 09 5d 0a 20   "Maple" }...]. 
18f0: 20 20 7d 27 2c 27 68 74 74 70 73 3a 2f 2f 61 64    }','https://ad
1900: 6f 62 65 2e 67 69 74 68 75 62 2e 69 6f 2f 53 70  obe.github.io/Sp
1910: 72 79 2f 73 61 6d 70 6c 65 73 2f 64 61 74 61 5f  ry/samples/data_
1920: 72 65 67 69 6f 6e 2f 4a 53 4f 4e 44 61 74 61 53  region/JSONDataS
1930: 65 74 53 61 6d 70 6c 65 2e 68 74 6d 6c 27 29 3b  etSample.html');
1940: 0a 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  .   INSERT INTO 
1950: 6a 32 28 69 64 2c 6a 73 6f 6e 2c 73 72 63 29 0a  j2(id,json,src).
1960: 20 20 20 56 41 4c 55 45 53 28 33 2c 27 5b 0a 09     VALUES(3,'[..
1970: 7b 0a 09 09 22 69 64 22 3a 20 22 30 30 30 31 22  {..."id": "0001"
1980: 2c 0a 09 09 22 74 79 70 65 22 3a 20 22 64 6f 6e  ,..."type": "don
1990: 75 74 22 2c 0a 09 09 22 6e 61 6d 65 22 3a 20 22  ut",..."name": "
19a0: 43 61 6b 65 22 2c 0a 09 09 22 70 70 75 22 3a 20  Cake",..."ppu": 
19b0: 30 2e 35 35 2c 0a 09 09 22 62 61 74 74 65 72 73  0.55,..."batters
19c0: 22 3a 0a 09 09 09 7b 0a 09 09 09 09 22 62 61 74  ":....{....."bat
19d0: 74 65 72 22 3a 0a 09 09 09 09 09 5b 0a 09 09 09  ter":......[....
19e0: 09 09 09 7b 20 22 69 64 22 3a 20 22 31 30 30 31  ...{ "id": "1001
19f0: 22 2c 20 22 74 79 70 65 22 3a 20 22 52 65 67 75  ", "type": "Regu
1a00: 6c 61 72 22 20 7d 2c 0a 09 09 09 09 09 09 7b 20  lar" },.......{ 
1a10: 22 69 64 22 3a 20 22 31 30 30 32 22 2c 20 22 74  "id": "1002", "t
1a20: 79 70 65 22 3a 20 22 43 68 6f 63 6f 6c 61 74 65  ype": "Chocolate
1a30: 22 20 7d 2c 0a 09 09 09 09 09 09 7b 20 22 69 64  " },.......{ "id
1a40: 22 3a 20 22 31 30 30 33 22 2c 20 22 74 79 70 65  ": "1003", "type
1a50: 22 3a 20 22 42 6c 75 65 62 65 72 72 79 22 20 7d  ": "Blueberry" }
1a60: 2c 0a 09 09 09 09 09 09 7b 20 22 69 64 22 3a 20  ,.......{ "id": 
1a70: 22 31 30 30 34 22 2c 20 22 74 79 70 65 22 3a 20  "1004", "type": 
1a80: 22 44 65 76 69 6c 27 27 73 20 46 6f 6f 64 22 20  "Devil''s Food" 
1a90: 7d 0a 09 09 09 09 09 5d 0a 09 09 09 7d 2c 0a 09  }......]....},..
1aa0: 09 22 74 6f 70 70 69 6e 67 22 3a 0a 09 09 09 5b  ."topping":....[
1ab0: 0a 09 09 09 09 7b 20 22 69 64 22 3a 20 22 35 30  .....{ "id": "50
1ac0: 30 31 22 2c 20 22 74 79 70 65 22 3a 20 22 4e 6f  01", "type": "No
1ad0: 6e 65 22 20 7d 2c 0a 09 09 09 09 7b 20 22 69 64  ne" },.....{ "id
1ae0: 22 3a 20 22 35 30 30 32 22 2c 20 22 74 79 70 65  ": "5002", "type
1af0: 22 3a 20 22 47 6c 61 7a 65 64 22 20 7d 2c 0a 09  ": "Glazed" },..
1b00: 09 09 09 7b 20 22 69 64 22 3a 20 22 35 30 30 35  ...{ "id": "5005
1b10: 22 2c 20 22 74 79 70 65 22 3a 20 22 53 75 67 61  ", "type": "Suga
1b20: 72 22 20 7d 2c 0a 09 09 09 09 7b 20 22 69 64 22  r" },.....{ "id"
1b30: 3a 20 22 35 30 30 37 22 2c 20 22 74 79 70 65 22  : "5007", "type"
1b40: 3a 20 22 50 6f 77 64 65 72 65 64 20 53 75 67 61  : "Powdered Suga
1b50: 72 22 20 7d 2c 0a 09 09 09 09 7b 20 22 69 64 22  r" },.....{ "id"
1b60: 3a 20 22 35 30 30 36 22 2c 20 22 74 79 70 65 22  : "5006", "type"
1b70: 3a 20 22 43 68 6f 63 6f 6c 61 74 65 20 77 69 74  : "Chocolate wit
1b80: 68 20 53 70 72 69 6e 6b 6c 65 73 22 20 7d 2c 0a  h Sprinkles" },.
1b90: 09 09 09 09 7b 20 22 69 64 22 3a 20 22 35 30 30  ....{ "id": "500
1ba0: 33 22 2c 20 22 74 79 70 65 22 3a 20 22 43 68 6f  3", "type": "Cho
1bb0: 63 6f 6c 61 74 65 22 20 7d 2c 0a 09 09 09 09 7b  colate" },.....{
1bc0: 20 22 69 64 22 3a 20 22 35 30 30 34 22 2c 20 22   "id": "5004", "
1bd0: 74 79 70 65 22 3a 20 22 4d 61 70 6c 65 22 20 7d  type": "Maple" }
1be0: 0a 09 09 09 5d 0a 09 7d 2c 0a 09 7b 0a 09 09 22  ....]..},..{..."
1bf0: 69 64 22 3a 20 22 30 30 30 32 22 2c 0a 09 09 22  id": "0002",..."
1c00: 74 79 70 65 22 3a 20 22 64 6f 6e 75 74 22 2c 0a  type": "donut",.
1c10: 09 09 22 6e 61 6d 65 22 3a 20 22 52 61 69 73 65  .."name": "Raise
1c20: 64 22 2c 0a 09 09 22 70 70 75 22 3a 20 30 2e 35  d",..."ppu": 0.5
1c30: 35 2c 0a 09 09 22 62 61 74 74 65 72 73 22 3a 0a  5,..."batters":.
1c40: 09 09 09 7b 0a 09 09 09 09 22 62 61 74 74 65 72  ...{....."batter
1c50: 22 3a 0a 09 09 09 09 09 5b 0a 09 09 09 09 09 09  ":......[.......
1c60: 7b 20 22 69 64 22 3a 20 22 31 30 30 31 22 2c 20  { "id": "1001", 
1c70: 22 74 79 70 65 22 3a 20 22 52 65 67 75 6c 61 72  "type": "Regular
1c80: 22 20 7d 0a 09 09 09 09 09 5d 0a 09 09 09 7d 2c  " }......]....},
1c90: 0a 09 09 22 74 6f 70 70 69 6e 67 22 3a 0a 09 09  ..."topping":...
1ca0: 09 5b 0a 09 09 09 09 7b 20 22 69 64 22 3a 20 22  .[.....{ "id": "
1cb0: 35 30 30 31 22 2c 20 22 74 79 70 65 22 3a 20 22  5001", "type": "
1cc0: 4e 6f 6e 65 22 20 7d 2c 0a 09 09 09 09 7b 20 22  None" },.....{ "
1cd0: 69 64 22 3a 20 22 35 30 30 32 22 2c 20 22 74 79  id": "5002", "ty
1ce0: 70 65 22 3a 20 22 47 6c 61 7a 65 64 22 20 7d 2c  pe": "Glazed" },
1cf0: 0a 09 09 09 09 7b 20 22 69 64 22 3a 20 22 35 30  .....{ "id": "50
1d00: 30 35 22 2c 20 22 74 79 70 65 22 3a 20 22 53 75  05", "type": "Su
1d10: 67 61 72 22 20 7d 2c 0a 09 09 09 09 7b 20 22 69  gar" },.....{ "i
1d20: 64 22 3a 20 22 35 30 30 33 22 2c 20 22 74 79 70  d": "5003", "typ
1d30: 65 22 3a 20 22 43 68 6f 63 6f 6c 61 74 65 22 20  e": "Chocolate" 
1d40: 7d 2c 0a 09 09 09 09 7b 20 22 69 64 22 3a 20 22  },.....{ "id": "
1d50: 35 30 30 34 22 2c 20 22 74 79 70 65 22 3a 20 22  5004", "type": "
1d60: 4d 61 70 6c 65 22 20 7d 0a 09 09 09 5d 0a 09 7d  Maple" }....]..}
1d70: 2c 0a 09 7b 0a 09 09 22 69 64 22 3a 20 22 30 30  ,..{..."id": "00
1d80: 30 33 22 2c 0a 09 09 22 74 79 70 65 22 3a 20 22  03",..."type": "
1d90: 64 6f 6e 75 74 22 2c 0a 09 09 22 6e 61 6d 65 22  donut",..."name"
1da0: 3a 20 22 4f 6c 64 20 46 61 73 68 69 6f 6e 65 64  : "Old Fashioned
1db0: 22 2c 0a 09 09 22 70 70 75 22 3a 20 30 2e 35 35  ",..."ppu": 0.55
1dc0: 2c 0a 09 09 22 62 61 74 74 65 72 73 22 3a 0a 09  ,..."batters":..
1dd0: 09 09 7b 0a 09 09 09 09 22 62 61 74 74 65 72 22  ..{....."batter"
1de0: 3a 0a 09 09 09 09 09 5b 0a 09 09 09 09 09 09 7b  :......[.......{
1df0: 20 22 69 64 22 3a 20 22 31 30 30 31 22 2c 20 22   "id": "1001", "
1e00: 74 79 70 65 22 3a 20 22 52 65 67 75 6c 61 72 22  type": "Regular"
1e10: 20 7d 2c 0a 09 09 09 09 09 09 7b 20 22 69 64 22   },.......{ "id"
1e20: 3a 20 22 31 30 30 32 22 2c 20 22 74 79 70 65 22  : "1002", "type"
1e30: 3a 20 22 43 68 6f 63 6f 6c 61 74 65 22 20 7d 0a  : "Chocolate" }.
1e40: 09 09 09 09 09 5d 0a 09 09 09 7d 2c 0a 09 09 22  .....]....},..."
1e50: 74 6f 70 70 69 6e 67 22 3a 0a 09 09 09 5b 0a 09  topping":....[..
1e60: 09 09 09 7b 20 22 69 64 22 3a 20 22 35 30 30 31  ...{ "id": "5001
1e70: 22 2c 20 22 74 79 70 65 22 3a 20 22 4e 6f 6e 65  ", "type": "None
1e80: 22 20 7d 2c 0a 09 09 09 09 7b 20 22 69 64 22 3a  " },.....{ "id":
1e90: 20 22 35 30 30 32 22 2c 20 22 74 79 70 65 22 3a   "5002", "type":
1ea0: 20 22 47 6c 61 7a 65 64 22 20 7d 2c 0a 09 09 09   "Glazed" },....
1eb0: 09 7b 20 22 69 64 22 3a 20 22 35 30 30 33 22 2c  .{ "id": "5003",
1ec0: 20 22 74 79 70 65 22 3a 20 22 43 68 6f 63 6f 6c   "type": "Chocol
1ed0: 61 74 65 22 20 7d 2c 0a 09 09 09 09 7b 20 22 69  ate" },.....{ "i
1ee0: 64 22 3a 20 22 35 30 30 34 22 2c 20 22 74 79 70  d": "5004", "typ
1ef0: 65 22 3a 20 22 4d 61 70 6c 65 22 20 7d 0a 09 09  e": "Maple" }...
1f00: 09 5d 0a 09 7d 0a 20 20 20 5d 27 2c 27 68 74 74  .]..}.   ]','htt
1f10: 70 73 3a 2f 2f 61 64 6f 62 65 2e 67 69 74 68 75  ps://adobe.githu
1f20: 62 2e 69 6f 2f 53 70 72 79 2f 73 61 6d 70 6c 65  b.io/Spry/sample
1f30: 73 2f 64 61 74 61 5f 72 65 67 69 6f 6e 2f 4a 53  s/data_region/JS
1f40: 4f 4e 44 61 74 61 53 65 74 53 61 6d 70 6c 65 2e  ONDataSetSample.
1f50: 68 74 6d 6c 27 29 3b 0a 20 20 20 53 45 4c 45 43  html');.   SELEC
1f60: 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20  T count(*) FROM 
1f70: 6a 32 3b 0a 7d 20 7b 33 7d 0a 0a 64 6f 5f 65 78  j2;.} {3}..do_ex
1f80: 65 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 2d  ecsql_test json-
1f90: 35 2e 32 20 7b 0a 20 20 53 45 4c 45 43 54 20 69  5.2 {.  SELECT i
1fa0: 64 2c 20 6a 73 6f 6e 5f 76 61 6c 69 64 28 6a 73  d, json_valid(js
1fb0: 6f 6e 29 2c 20 6a 73 6f 6e 5f 74 79 70 65 28 6a  on), json_type(j
1fc0: 73 6f 6e 29 2c 20 27 7c 27 20 46 52 4f 4d 20 6a  son), '|' FROM j
1fd0: 32 20 4f 52 44 45 52 20 42 59 20 69 64 3b 0a 7d  2 ORDER BY id;.}
1fe0: 20 7b 31 20 31 20 6f 62 6a 65 63 74 20 7c 20 32   {1 1 object | 2
1ff0: 20 31 20 6f 62 6a 65 63 74 20 7c 20 33 20 31 20   1 object | 3 1 
2000: 61 72 72 61 79 20 7c 7d 0a 0a 69 66 63 61 70 61  array |}..ifcapa
2010: 62 6c 65 20 21 76 74 61 62 20 7b 0a 20 20 66 69  ble !vtab {.  fi
2020: 6e 69 73 68 5f 74 65 73 74 0a 20 20 72 65 74 75  nish_test.  retu
2030: 72 6e 0a 7d 0a 0a 23 20 66 75 6c 6c 6b 65 79 20  rn.}..# fullkey 
2040: 69 73 20 61 6c 77 61 79 73 20 74 68 65 20 73 61  is always the sa
2050: 6d 65 20 61 73 20 70 61 74 68 2b 6b 65 79 20 28  me as path+key (
2060: 77 69 74 68 20 61 70 70 72 6f 70 72 69 61 74 65  with appropriate
2070: 20 66 6f 72 6d 61 74 74 69 6e 67 29 0a 23 0a 64   formatting).#.d
2080: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6a  o_execsql_test j
2090: 73 6f 6e 2d 35 2e 33 20 7b 0a 20 20 53 45 4c 45  son-5.3 {.  SELE
20a0: 43 54 20 6a 32 2e 72 6f 77 69 64 2c 20 6a 78 2e  CT j2.rowid, jx.
20b0: 72 6f 77 69 64 2c 20 66 75 6c 6c 6b 65 79 2c 20  rowid, fullkey, 
20c0: 70 61 74 68 2c 20 6b 65 79 0a 20 20 20 20 46 52  path, key.    FR
20d0: 4f 4d 20 6a 32 2c 20 6a 73 6f 6e 5f 74 72 65 65  OM j2, json_tree
20e0: 28 6a 32 2e 6a 73 6f 6e 29 20 41 53 20 6a 78 0a  (j2.json) AS jx.
20f0: 20 20 20 57 48 45 52 45 20 66 75 6c 6c 6b 65 79     WHERE fullkey
2100: 21 3d 28 70 61 74 68 20 7c 7c 20 43 41 53 45 20  !=(path || CASE 
2110: 57 48 45 4e 20 74 79 70 65 6f 66 28 6b 65 79 29  WHEN typeof(key)
2120: 3d 3d 27 69 6e 74 65 67 65 72 27 20 54 48 45 4e  =='integer' THEN
2130: 20 27 5b 27 7c 7c 6b 65 79 7c 7c 27 5d 27 0a 20   '['||key||']'. 
2140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45                 E
2160: 4c 53 45 20 27 2e 27 7c 7c 6b 65 79 20 45 4e 44  LSE '.'||key END
2170: 29 3b 0a 7d 20 7b 7d 0a 64 6f 5f 65 78 65 63 73  );.} {}.do_execs
2180: 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 2d 35 2e 34  ql_test json-5.4
2190: 20 7b 0a 20 20 53 45 4c 45 43 54 20 6a 32 2e 72   {.  SELECT j2.r
21a0: 6f 77 69 64 2c 20 6a 78 2e 72 6f 77 69 64 2c 20  owid, jx.rowid, 
21b0: 66 75 6c 6c 6b 65 79 2c 20 70 61 74 68 2c 20 6b  fullkey, path, k
21c0: 65 79 0a 20 20 20 20 46 52 4f 4d 20 6a 32 2c 20  ey.    FROM j2, 
21d0: 6a 73 6f 6e 5f 65 61 63 68 28 6a 32 2e 6a 73 6f  json_each(j2.jso
21e0: 6e 29 20 41 53 20 6a 78 0a 20 20 20 57 48 45 52  n) AS jx.   WHER
21f0: 45 20 66 75 6c 6c 6b 65 79 21 3d 28 70 61 74 68  E fullkey!=(path
2200: 20 7c 7c 20 43 41 53 45 20 57 48 45 4e 20 74 79   || CASE WHEN ty
2210: 70 65 6f 66 28 6b 65 79 29 3d 3d 27 69 6e 74 65  peof(key)=='inte
2220: 67 65 72 27 20 54 48 45 4e 20 27 5b 27 7c 7c 6b  ger' THEN '['||k
2230: 65 79 7c 7c 27 5d 27 0a 20 20 20 20 20 20 20 20  ey||']'.        
2240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2250: 20 20 20 20 20 20 20 20 45 4c 53 45 20 27 2e 27          ELSE '.'
2260: 7c 7c 6b 65 79 20 45 4e 44 29 3b 0a 7d 20 7b 7d  ||key END);.} {}
2270: 0a 0a 0a 23 20 56 65 72 69 66 79 20 74 68 61 74  ...# Verify that
2280: 20 74 68 65 20 6a 73 6f 6e 5f 65 61 63 68 2e 6a   the json_each.j
2290: 73 6f 6e 20 61 6e 64 20 6a 73 6f 6e 5f 74 72 65  son and json_tre
22a0: 65 2e 6a 73 6f 6e 20 6f 75 74 70 75 74 20 69 73  e.json output is
22b0: 20 61 6c 77 61 79 73 20 74 68 65 0a 23 20 73 61   always the.# sa
22c0: 6d 65 20 61 73 20 69 6e 70 75 74 2e 0a 23 0a 64  me as input..#.d
22d0: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6a  o_execsql_test j
22e0: 73 6f 6e 2d 35 2e 35 20 7b 0a 20 20 53 45 4c 45  son-5.5 {.  SELE
22f0: 43 54 20 6a 32 2e 72 6f 77 69 64 2c 20 6a 78 2e  CT j2.rowid, jx.
2300: 72 6f 77 69 64 2c 20 66 75 6c 6c 6b 65 79 2c 20  rowid, fullkey, 
2310: 70 61 74 68 2c 20 6b 65 79 0a 20 20 20 20 46 52  path, key.    FR
2320: 4f 4d 20 6a 32 2c 20 6a 73 6f 6e 5f 65 61 63 68  OM j2, json_each
2330: 28 6a 32 2e 6a 73 6f 6e 29 20 41 53 20 6a 78 0a  (j2.json) AS jx.
2340: 20 20 20 57 48 45 52 45 20 6a 78 2e 6a 73 6f 6e     WHERE jx.json
2350: 3c 3e 6a 32 2e 6a 73 6f 6e 3b 0a 7d 20 7b 7d 0a  <>j2.json;.} {}.
2360: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
2370: 6a 73 6f 6e 2d 35 2e 36 20 7b 0a 20 20 53 45 4c  json-5.6 {.  SEL
2380: 45 43 54 20 6a 32 2e 72 6f 77 69 64 2c 20 6a 78  ECT j2.rowid, jx
2390: 2e 72 6f 77 69 64 2c 20 66 75 6c 6c 6b 65 79 2c  .rowid, fullkey,
23a0: 20 70 61 74 68 2c 20 6b 65 79 0a 20 20 20 20 46   path, key.    F
23b0: 52 4f 4d 20 6a 32 2c 20 6a 73 6f 6e 5f 74 72 65  ROM j2, json_tre
23c0: 65 28 6a 32 2e 6a 73 6f 6e 29 20 41 53 20 6a 78  e(j2.json) AS jx
23d0: 0a 20 20 20 57 48 45 52 45 20 6a 78 2e 6a 73 6f  .   WHERE jx.jso
23e0: 6e 3c 3e 6a 32 2e 6a 73 6f 6e 3b 0a 7d 20 7b 7d  n<>j2.json;.} {}
23f0: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
2400: 20 6a 73 6f 6e 2d 35 2e 37 20 7b 0a 20 20 53 45   json-5.7 {.  SE
2410: 4c 45 43 54 20 6a 32 2e 72 6f 77 69 64 2c 20 6a  LECT j2.rowid, j
2420: 78 2e 72 6f 77 69 64 2c 20 66 75 6c 6c 6b 65 79  x.rowid, fullkey
2430: 2c 20 70 61 74 68 2c 20 6b 65 79 0a 20 20 20 20  , path, key.    
2440: 46 52 4f 4d 20 6a 32 2c 20 6a 73 6f 6e 5f 65 61  FROM j2, json_ea
2450: 63 68 28 6a 32 2e 6a 73 6f 6e 29 20 41 53 20 6a  ch(j2.json) AS j
2460: 78 0a 20 20 20 57 48 45 52 45 20 6a 78 2e 76 61  x.   WHERE jx.va
2470: 6c 75 65 3c 3e 6a 78 2e 61 74 6f 6d 20 41 4e 44  lue<>jx.atom AND
2480: 20 74 79 70 65 20 4e 4f 54 20 49 4e 20 28 27 61   type NOT IN ('a
2490: 72 72 61 79 27 2c 27 6f 62 6a 65 63 74 27 29 3b  rray','object');
24a0: 0a 7d 20 7b 7d 0a 64 6f 5f 65 78 65 63 73 71 6c  .} {}.do_execsql
24b0: 5f 74 65 73 74 20 6a 73 6f 6e 2d 35 2e 38 20 7b  _test json-5.8 {
24c0: 0a 20 20 53 45 4c 45 43 54 20 6a 32 2e 72 6f 77  .  SELECT j2.row
24d0: 69 64 2c 20 6a 78 2e 72 6f 77 69 64 2c 20 66 75  id, jx.rowid, fu
24e0: 6c 6c 6b 65 79 2c 20 70 61 74 68 2c 20 6b 65 79  llkey, path, key
24f0: 0a 20 20 20 20 46 52 4f 4d 20 6a 32 2c 20 6a 73  .    FROM j2, js
2500: 6f 6e 5f 74 72 65 65 28 6a 32 2e 6a 73 6f 6e 29  on_tree(j2.json)
2510: 20 41 53 20 6a 78 0a 20 20 20 57 48 45 52 45 20   AS jx.   WHERE 
2520: 6a 78 2e 76 61 6c 75 65 3c 3e 6a 78 2e 61 74 6f  jx.value<>jx.ato
2530: 6d 20 41 4e 44 20 74 79 70 65 20 4e 4f 54 20 49  m AND type NOT I
2540: 4e 20 28 27 61 72 72 61 79 27 2c 27 6f 62 6a 65  N ('array','obje
2550: 63 74 27 29 3b 0a 7d 20 7b 7d 0a 0a 64 6f 5f 65  ct');.} {}..do_e
2560: 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e  xecsql_test json
2570: 2d 36 2e 31 20 7b 0a 20 20 53 45 4c 45 43 54 20  -6.1 {.  SELECT 
2580: 6a 73 6f 6e 5f 76 61 6c 69 64 28 27 7b 22 61 22  json_valid('{"a"
2590: 3a 35 35 2c 22 62 22 3a 37 32 2c 7d 27 29 3b 0a  :55,"b":72,}');.
25a0: 7d 20 7b 30 7d 0a 64 6f 5f 65 78 65 63 73 71 6c  } {0}.do_execsql
25b0: 5f 74 65 73 74 20 6a 73 6f 6e 2d 36 2e 32 20 7b  _test json-6.2 {
25c0: 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e 5f 76  .  SELECT json_v
25d0: 61 6c 69 64 28 27 7b 22 61 22 3a 35 35 2c 22 62  alid('{"a":55,"b
25e0: 22 3a 37 32 7d 27 29 3b 0a 7d 20 7b 31 7d 0a 64  ":72}');.} {1}.d
25f0: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6a  o_execsql_test j
2600: 73 6f 6e 2d 36 2e 33 20 7b 0a 20 20 53 45 4c 45  son-6.3 {.  SELE
2610: 43 54 20 6a 73 6f 6e 5f 76 61 6c 69 64 28 27 5b  CT json_valid('[
2620: 22 61 22 2c 35 35 2c 22 62 22 2c 37 32 2c 5d 27  "a",55,"b",72,]'
2630: 29 3b 0a 7d 20 7b 30 7d 0a 64 6f 5f 65 78 65 63  );.} {0}.do_exec
2640: 73 71 6c 5f 74 65 73 74 20 6a 73 6f 6e 2d 36 2e  sql_test json-6.
2650: 34 20 7b 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f  4 {.  SELECT jso
2660: 6e 5f 76 61 6c 69 64 28 27 5b 22 61 22 2c 35 35  n_valid('["a",55
2670: 2c 22 62 22 2c 37 32 5d 27 29 3b 0a 7d 20 7b 31  ,"b",72]');.} {1
2680: 7d 0a 0a 0a 66 69 6e 69 73 68 5f 74 65 73 74 0a  }...finish_test.