不知道为什么在替换 paymentKey 和 Session key 的值后必须说无效 Json

Not sure why it has to say not valid Json after replacing the values of paymentKey and Session key

我正在尝试读取一个 json 文件,并在遍历到名为“paymentKey”和“Session key[=33 的属性后=]" 并通过 JSONObject 更改它们的值,post 操作失败。

当我在执行上述更改后检查出 json 时,结构似乎有点无序,发生了变化,甚至了解到 json 不是有效结构。

这有点烦人,不知道如何在替换属性值后在标记中保留 json 格式。

下面是Json使用的

{
    "idempotentId": "133215472229",
    "customerId": "12345",
    "brandId": "ANCHOR",
    "sellingChannel": "WEBOA",
    "items": [
        {
            "lineItemId": 123,
            "productId": "ANCHOR-WEBOA-640213214",
            "price": 1.19,
            "quantity": 1,
            "modifierGroups": [],
            "childItems": [],
            "note": " Drink without snacks"
        }
    ],
    "fulfillment": {
        "email": "12@gmail.com",
        "phoneNumber": "+912222621",
        "fulfillmentType": "PickUp",
        "asap": true,
        "pickupFirstName": "Kiran",
        "pickupLastName": "Kumar",
        "locationId": "33211111"
    },
    "payment": {
        "paymentKey": "12222-444-555-2222-44444121e",
        "sessionKey": "02f3waAjHJnVCTstOIu0jcSZfm_1HnGum1lZdsu6iDlLxxjO1FYsG9DHz9130ZzMMkjYY9j5w.7V8CijbmiPSo5ESDsq5hsQ.RpYSS5wkgoSSOMjktEyDTHZh1IPq0wNayp--DE3HE53uUgTEehCvHjSsUP5q8U2ZN1kZXbsufwm_mRCV8hLCrmWVTchhVUTJtmEpyYy142DtSp1ikXOVzGN5i9z_oP5e79QvgmU7_n1C5DeARFRagQClT87vUFBUfleSbLaRyH5v3wkU7ji9URUetcq1iAfS5-cNt6-uJaulFJc2y6uNdn0OtjIe74Hp5G7Gx54VYggduoqx5X1rsCssobfUSJUDLt_vVpz5BvhQM88EaysMAB6EcQHoOnZd_YWrz4IDAAZSwSBUFQAkypVmHo5pbvp64cTDrZE73EYkEwJLGf0dRmedMFe2HiU3DiCr97K3I3KuufxYM_eMRIcn739dntxTq4QePtFdqYGWBzXWQutvvqxWQPbNi7PG_-aauEOzlwJiXG94C8t7NGu0SjB8xHf11Z3orf5Ni4-fRKugY8VJNBl39hnb4-d-g47ut7iuiFDkDHJzlSgt9LFq__CxShG_.YkL2w7QEU85VHjpOj5urieCr4-G"
    },
    "subTotal": 100.19,
    "tax": 4.19
}

下面是代码片段

import org.json.JSONObject;
import org.json.JSONArray;


public JSONObject constructCreateOrderPayload( String freedomPayPaymentKey,String orderInit_SessionKey, String payloadFile) {

String filepath  = System.getProperty("user.dir")+"/src/test/resources/JsonFiles/"+payloadFile;

try {
            String jsonContents = new String((Files.readAllBytes(Paths.get(filepath))));
            JSONObject jsonObject = new JSONObject(jsonContents);
                        
            JSONObject payment_obj =  (JSONObject) jsonObject.get("payment");
            payment_obj.put("paymentKey", freedomPayPaymentKey);  
            payment_obj.put("sessionKey",orderInit_SessionKey);
            System.out.println("-------------------------------------------------------------------------------------------------------------------------------------------------------------------------");
            System.out.println( " After Changes in JSON OBJECT : ");
            System.out.println(jsonObject.toString());
            
            System.out.println("");
            System.out.println("-------------------------------------------------------------------------------------------------------------------------------------------------------------------------");
            
            
        payload = jsonObject; //  when i print the json boject the format is displaced hence when validated it says invalid json 

        } catch (IOException e) {
            System.out.println("No file found in the path ");
            e.printStackTrace();
        }
        
        
        return payload;
    }
    

当我在更改后验证 Json 时,它显示为无效并出现错误,如下面的快照

我尝试了很多但没有成功,有人可以查看问题并告诉我我哪里出错了或者提供这个问题的解决方案。

JSON 无序,当您在进行更改之前打印 jsonObject 时,您将知道 JSON 的顺序已更改,我使用了 Jackson Databind 库,下面是一个工作代码,相应地改变它

    String filepath = "C:\Users\wilfred\Desktop\Input.json";

    try {
        String jsonContents = new String((Files.readAllBytes(Paths.get(filepath))));

        ObjectMapper mapper = new ObjectMapper();
        JsonNode expected = mapper.readTree(jsonContents);

        System.out.println("Before converting : " + expected.toString());

        JsonNode payment_obj = (expected.get("payment"));

        ((ObjectNode) payment_obj).put("paymentKey", "Trial1");
        ((ObjectNode) payment_obj).put("sessionKey", "Trial2");

        System.out.println("After converting : " + expected.toString());

    } catch (IOException e) {
        System.out.println("No file found in the path ");
        e.printStackTrace();
    }

}

我的做法是正确的。唯一的错误是我没有 supply/pass 对少数 JSon 属性的正确值,这导致了错误响应。

已按要求整改,结果正确,关闭。