簡體   English   中英

使用JSONObject和JSONArray構建JSON Web令牌

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM