【问题标题】:JSONObject is not getting converted to String properlyJSONObject 未正确转换为字符串
【发布时间】:2018-05-07 17:37:36
【问题描述】:

我正在将 JSONObject 转换为字符串。我正在使用以下代码:

String decresponse=obj.getFileWithUtil("Files/v3user22.txt");
System.out.println("Decrypted string is "+decresponse);
JSONObject js = JSONObject(decresponse);
System.out.println("JSON Object is "+js.toString());

在这里,由于 json 非常大,我从文件中获取了 decresponse 的值。 decresponse 的值是:

{
    "userid":123456,
    "status":"SUCCESS",
    "name":{
        "firstName":"firstname",
        "lastName":"lastname"
    },
    "dob":"03/02/1993",
    "gender":"M",
    "kycType":"Manual",
    "address":{
        "permanentAddress":{
            "country":"INDIA",
            "street_1":"K-26",
            "street_2":"",
            "city":"North",
            "state":"Delhi",
            "postal_code":"110052",
            "locality":"abc"
        },
        "correspondenceAddress":{
            "country":"INDIA",
            "street_1":"abc",
            "street_2":"abc",
            "city":"ABC",
            "state":"Punjab",
            "postal_code":"111000",
            "locality":"def"
        }
    },
    "docs":[
        {
            "nameOnDoc":"name",
            "verificationStatus":"FAILED",
            "kycNameMatch":"SUCCESS",
            "docCode":"aadhar",
            "docValue":"1898989",
            "submittedAs":"AdditionalDoc"
        },
        {
            "nameOnDoc":"abc",
            "verificationStatus":"NOT_ATTEMPTED",
            "kycNameMatch":"NOT_ATTEMPTED",
            "docCode":"pan",
            "docValue":"KSKA1234F",
            "submittedAs":"AdditionalDoc",
            "expiryDate":"03/02/2018"
        },
        {
            "docCode":"voter",
            "docValue":"CIBPS2107P",
            "submittedAs":"Poi_Poa"
        }
    ],
    "agents":[
        {
            "bankAgentType":"BF",
            "agentBranch":"nodia",
            "agentDesignation":"agent manager",
            "agentEmpcode":"1010111",
            "custId":"119990",
            "agentId":"",
            "agencyType":"CFA",
            "agencyName":"internal"
        },
        {
            "bankAgentType":"BC",
            "agentBranch":"nodia",
            "agentDesignation":"agent manager",
            "agentEmpcode":"",
            "custId":"119999",
            "agentId":"MORPHO-1782",
            "agencyType":"VA",
            "agencyName":"morpho"
        }
    ],
    "relatives":[
        {
            "relationShip":"FATHER",
            "firstName":"firstname",
            "lastName":"lastname"
        },
        {
            "relationShip":"MOTHER",
            "firstName":"firstname",
            "lastName":"lastname"
        }
    ],
    "useKycDetails":"UNDER_REVIEW",
    "amlflags":{
        "sanction":"N",
        "pep":"N"
    },
    "walletflags":{
        "upgraded":"1",
        "updated":"1",
        "blocked":"0"
    },
    "suspended":"false",
    "aadhar_type1_check":"FAILED",
    "aadhar_kyc_name_check":"SUCCESS",
    "aadharSubmittedAs":"AdditionalDoc",
    "aadharVerified":"false",
    "panSubmittedAs":"AdditionalDoc",
    "panVerified":"false",
    "maritalStatus":"MARRIED",
    "profession":"PRIVATE_SECTOR_JOB",
    "nationality":"INDIAN",
    "kycVerificationDate":"04/01/2017",
    "declarationPlace":"Delhi",
    "dmsInfos":[
        {
            "type":"",
            "dmsid":""
        }
    ],
    "aadharAuthCode":"56bd65db0dbc4b2a848841a44eabb54e",
    "agriculturalIncome":"100000",
    "nonAgriculturalIncome":"50000",
    "seedingStatus":"consent_given"
}

但是,在将 json 对象转换为字符串时,值如下:

{
    "panVerified":"false",
    "gender":"M",
    "userid":123456,
    "panSubmittedAs":"AdditionalDoc",
    "aadharAuthCode":"56bd65db0dbc4b2a848841a44eabb54e",
    "docs":[
        {
            "kycNameMatch":"SUCCESS",
            "verificationStatus":"FAILED",
            "nameOnDoc":"name",
            "docCode":"aadhar",
            "docValue":"1898989",
            "submittedAs":"AdditionalDoc"
        },
        {
            "expiryDate":"03/02/2018",
            "kycNameMatch":"NOT_ATTEMPTED",
            "verificationStatus":"NOT_ATTEMPTED",
            "nameOnDoc":"abc",
            "docCode":"pan",
            "docValue":"KSKA1234F",
            "submittedAs":"AdditionalDoc"
        },
        {
            "docCode":"voter",
            "docValue":"CIBPS2107P",
            "submittedAs":"Poi_Poa"
        }
    ],
    "aadhar_type1_check":"FAILED",
    "aadharSubmittedAs":"AdditionalDoc",
    "useKycDetails":"UNDER_REVIEW",
    "kycVerificationDate":"04/01/2017",
    "kycType":"Manual",
    "profession":"PRIVATE_SECTOR_JOB",
    "address":{
        "permanentAddress":{
            "country":"INDIA",
            "street_1":"K-26",
            "city":"North",
            "street_2":"",
            "locality":"abc",
            "state":"Delhi",
            "postal_code":"110052"
        },
        "correspondenceAddress":{
            "country":"INDIA",
            "street_1":"abc",
            "city":"ABC",
            "street_2":"abc",
            "locality":"def",
            "state":"Punjab",
            "postal_code":"111000"
        }
    },
    "nonAgriculturalIncome":"50000",
    "seedingStatus":"consent_given",
    "dmsInfos":[
        {
            "dmsid":"",
            "type":""
        }
    ],
    "relatives":[
        {
            "firstName":"firstname",
            "lastName":"lastname",
            "relationShip":"FATHER"
        },
        {
            "firstName":"firstname",
            "lastName":"lastname",
            "relationShip":"MOTHER"
        }
    ],
    "suspended":"false",
    "agents":[
        {
            "agentId":"",
            "agentEmpcode":"1010111",
            "custId":"119990",
            "agentBranch":"nodia",
            "agentDesignation":"agent manager",
            "bankAgentType":"BF",
            "agencyType":"CFA",
            "agencyName":"internal"
        },
        {
            "agentId":"MORPHO-1782",
            "agentEmpcode":"",
            "custId":"119999",
            "agentBranch":"nodia",
            "agentDesignation":"agent manager",
            "bankAgentType":"BC",
            "agencyType":"VA",
            "agencyName":"morpho"
        }
    ],
    "amlflags":{
        "sanction":"N",
        "pep":"N"
    },
    "aadhar_kyc_name_check":"SUCCESS",
    "nationality":"INDIAN",
    "dob":"03/02/1993",
    "walletflags":{
        "upgraded":"1",
        "blocked":"0",
        "updated":"1"
    },
    "name":{
        "firstName":"firstname",
        "lastName":"lastname"
    },
    "aadharVerified":"false",
    "maritalStatus":"MARRIED",
    "status":"SUCCESS",
    "declarationPlace":"Delhi",
    "agriculturalIncome":"100000"
}

为什么我得到不同的值?

【问题讨论】:

  • 请格式化这些 JSON 对象,因为它们难以阅读。您不想让人们更难回答和帮助,是吗?
  • 现在格式化..
  • JSONObject 类在很多库中都有,你指的是哪一个?
  • 有什么不同?所有的数据看起来都是一样的,你永远不应该依赖 JSON 中的对象顺序。

标签: java json string


【解决方案1】:

为什么我得到不同的值

这些值并没有不同。它们只是具有不同顺序的 key:value 对。

JSON 结构包含 key:value 对,其中 keys 是唯一的。在大多数情况下,键的顺序并不重要,因此像org.json.JSONObject 这样的类将它们存储在内部HashMap 中,这不会保留插入顺序(但允许快速访问值)。

toString() 在内部调用时,它会使用 HashMap 迭代器构建 String,因此顺序取决于键的数量及其哈希值,而不是插入顺序。


如果您想保持顺序,请考虑使用其他库,例如 gson。您的解析可能如下所示:

JsonParser jsonParser = new JsonParser();
JsonObject js = jsonParser.parse(decresponse).getAsJsonObject();

js.toString() 会导致
{"userid":123456,"status":"SUCCESS","name":{"firstName":"firstname", ... 这似乎是你所追求的。

【讨论】:

  • 有没有其他方法可以将 json 字符串存储到 JSON 对象中,然后在保持顺序的同时再次将其转换为字符串?
  • 谢谢,它工作得很好。我还有一个疑问。 gson 是否也提供对 JSONArray 的支持。如果我想将 JSONArray 转换为字符串。
  • @PrashantMudgal gosn 是 JSON 库,允许我们用 JSON 做很多事情。如果不支持 JSON 数组,它将不会在全球范围内使用 :) 所以是的,那里有JsonArray 类。
猜你喜欢
  • 2020-11-12
  • 1970-01-01
  • 2017-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-15
  • 2012-05-12
  • 1970-01-01
相关资源
最近更新 更多