comparison src/luan/modules/Parsers.luan @ 1774:764723436f05

better json_parse exception
author Franklin Schmidt <fschmidt@gmail.com>
date Thu, 27 Jul 2023 17:24:49 -0600
parents 36c28be6d432
children e380ab6c0c78
comparison
equal deleted inserted replaced
1773:b914a726061f 1774:764723436f05
23 local error = Luan.error 23 local error = Luan.error
24 local type = Luan.type or error() 24 local type = Luan.type or error()
25 local Table = require "luan:Table.luan" 25 local Table = require "luan:Table.luan"
26 local java_to_table_deep = Table.java_to_table_deep or error() 26 local java_to_table_deep = Table.java_to_table_deep or error()
27 local JsonParser = require "java:goodjava.json.JsonParser" 27 local JsonParser = require "java:goodjava.json.JsonParser"
28 local ParseException = require "java:goodjava.parser.ParseException"
28 29
29 -- converts json string to luan object 30 -- converts json string to luan object
30 function Parsers.json_parse(s) 31 function Parsers.json_parse(s)
31 local obj = JsonParser.parse(s) 32 local obj
33 try
34 obj = JsonParser.parse(s)
35 catch e
36 local java = e.java.getCause()
37 if java~=nil and java.instanceof(ParseException) then
38 e.message = java.getSuperMessage()
39 e.text = java.text or error()
40 e.error_index = java.errorIndex or error()
41 e.high_index = java.highIndex or error()
42 end
43 e.throw()
44 end
32 return type(obj)=="java" and java_to_table_deep(obj) or obj 45 return type(obj)=="java" and java_to_table_deep(obj) or obj
33 end 46 end
34 47
35 return Parsers 48 return Parsers