![](/img/trans.png)
[英]Parse JSON data using JSONReader or JSONObject/JSONArray
[英]Building JSON Web Token using JSONObject and JSONArray
我正在使用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\\":\\"[\\\\\\"{\\\\\\\\\\\\\\"Amount\\\\\\\\\\\\\\":100,\\\\\\\\\\\\\\"TaxRate\\\\\\\\\\\\\\":\\\\\\\\\\\\\\"A\\\\\\\\\\\\\\"}\\\\\\",\\\\\\"{\\\\\\\\\\\\\\"Amount\\\\\\\\\\\\\\":300,\\\\\\\\\\\\\\"TaxRate\\\\\\\\\\\\\\":\\\\\\\\\\\\\\"B\\\\\\\\\\\\\\"}\\\\\\"]\\"}"]
。
但是,槽數組包含沒有反斜杠的元素,例如。 {"Amount":100,"TaxRate":"A"}
。 taxs數組有一個條目,它看起來像{"VAT":"[\\"{\\\\\\"Amount\\\\\\":100,\\\\\\"TaxRate\\\\\\":\\\\\\"A\\\\\\"}\\",\\"{\\\\\\"Amount\\\\\\":300,\\\\\\"TaxRate\\\\\\":\\\\\\"B\\\\\\"}\\"]"}
構建我要創建的結構的正確方法是什么?
看起來toString()
方法轉義了引號並添加了斜杠。 由於服務器端應用程序無法解析請求,因此此類有效負載無法在請求中使用。
Nimbus Jose內部使用json-smart 。 因此,導入語句應如下所示:
import net.minidev.json.JSONArray;
import net.minidev.json.JSONObject;
用於創建json結構的代碼:
JSONArray taxes= new JSONArray();
JSONArray vat = new JSONArray();
JSONObject a = new JSONObject();
a.put("TaxRate", "A");
a.put("Amount", 100);
vat.add(a);
JSONObject b = new JSONObject();
b.put("TaxRate", "B");
b.put("Amount", 300);
vat.add(b);
JSONObject vatObject = new JSONObject();
vatObject.put("VAT", vat);
taxes.add(vatObject);
JSONObject taxesObject = new JSONObject();
taxesObject.put("Taxes", taxes);
// generate string:
System.out.println(taxesObject.toJSONString());
// or create JWT:
new JWSObject(new JWSHeader(...), new Payload(taxesObject))
輸出:
{"Taxes":[{"VAT":[{"Amount":100,"TaxRate":"A"},{"Amount":300,"TaxRate":"B"}]}]}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.