【发布时间】:2015-12-14 01:47:25
【问题描述】:
我正在使用 JSONObject 和 JSONArray 构建 JSON Web 令牌 (JWT)。创建有效负载时,我需要匹配以下部分(包含数组的数组)
"Taxes":
[{
"VAT": [{ "TaxRate": "A", "Amount": 100 }, { "TaxRate": "B", "Amount": 300 }]
]}
我尝试用下面的代码来实现它
JSONArray taxes= new JSONArray();
JSONArray vat = new JSONArray();
vat.add(new JSONObject()
.put("TaxRate", "A")
.put("Amount", 100).toString());
vat.add(new JSONObject()
.put("TaxRate", "B")
.put("Amount", 300).toString());
taxes.add(new JSONObject()
.put("VAT", vat).toString());
问题
如果根本不调用toString() 方法,则结果为[{}]。如果在添加到 vat 数组时未调用它们,则结果为 ["{\"VAT\":\"[{},{}]\"}"]。
tax 数组字符串打印到控制台时的最终结果是["{\"VAT\":\"[\\\"{\\\\\\\"Amount\\\\\\\":100,\\\\\\\"TaxRate\\\\\\\":\\\\\\\"A\\\\\\\"}\\\",\\\"{\\\\\\\"Amount\\\\\\\":300,\\\\\\\"TaxRate\\\\\\\":\\\\\\\"B\\\\\\\"}\\\"]\"}"]。
但是,vat 数组包含没有反斜杠的元素,例如。 {"Amount":100,"TaxRate":"A"}。 tax 数组有一个条目,看起来像 {"VAT":"[\"{\\\"Amount\\\":100,\\\"TaxRate\\\":\\\"A\\\"}\",\"{\\\"Amount\\\":300,\\\"TaxRate\\\":\\\"B\\\"}\"]"}
问题
构建我正在尝试创建的结构的正确方法是什么?
看起来toString() 方法正在转义引号并添加斜杠。这种负载不能用于请求,因为服务器端应用程序无法解析它。
【问题讨论】:
-
你使用什么样的框架将对象序列化为 json?
-
也许尝试分别创建每个 JSON 对象(而不是直接添加)并将对象记录到控制台。使用 .toString() 添加对象并不好,基本上会破坏内部对象。
-
@ErnestSadykov:JSONObject 是 json-jena 1.0,而 JSONArray 是 nimbus-jose-jwt 3.4。