2017-11-24 6 views
-1

Ich habe versucht, den folgenden JSon Körper Anfrage JSON zu schreiben:Reihenfolge der Knoten Änderungen JSON während machen POST-Anfrage Swift

let parameters = [ 
     "createTransactionRequest": [ 
      "merchantAuthentication": [ 
       "name": "xxxxxxxx", 
       "transactionKey": "xxxxxxxxx" 
      ], 
      "refId": "123456", 
      "transactionRequest": [ 
       "transactionType": "authCaptureTransaction", 
       "amount": "5", 
       "payment": [ 
        "opaqueData": [ 
         "dataDescriptor": desc!, 
         "dataValue": tocken! 
        ] 
       ] 
      ] 
     ] 
    ] 

Wenn ich (Parameter) die Reihenfolge der Knoten zu drucken versuche ändert es sieht aus wie

["createTransactionRequest": 

["refId": "123456", 
"transactionRequest": 

["payment": ["opaqueData": ["dataDescriptor": "COMMON.ACCEPT.INAPP.PAYMENT", "dataValue": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx="]], 

"transactionType": "authCaptureTransaction", 

"amount": "5"], 

"merchantAuthentication": ["name": "xxxxxxx", "transactionKey": 

"6gvE46G5seZt563w"] 
] 
] 

ich erhalte Antwort wie

{ messages =  { 
     message =   (
         { 
       code = E00003; 
       text = "The element 'createTransactionRequest' in namespace 

'AnetApi/xml/v1/schema/AnetApiSchema.xsd' has invalid child element 

'refId' in namespace 'AnetApi/xml/v1/schema/AnetApiSchema.xsd'. List of 

possible elements expected: 'merchantAuthentication' in namespace 

'AnetApi/xml/v1/schema/AnetApiSchema.xsd'."; 
      } 
     ); 
     resultCode = Error; 
    }; 
} 

Das ist wirklich ein nnoying. Anyones Hilfe wird sehr dankbar sein.

+1

Es spielt keine Rolle, um welche Reihenfolge es sich handelt. Und Wörterbücher haben keine Reihenfolge, also gibt es sowieso nichts, was Sie tun können. – rmaddy

+0

danke für die antwort. warum eine Antwort ist immer wie „hat ungültiges Kind-Element ‚RefId‘im Namensraum‚AnetApi/xml/v1/schema/AnetApiSchema.xsd‘Liste der möglicher Elemente erwartet:.‚merchantAuthentication‘“ –

+0

Dies wies darauf hin, dass die Struktur Ihres Wörterbuchs stimmt nicht mit dem überein, was der Server erwartet. – Gereon

Antwort

0

Sie benötigen eine Datenstruktur wie folgt zu ändern:

struct Transaction: Codable { 
    let createTransactionRequest: CreateTransactionRequest 
} 
struct CreateTransactionRequest: Codable { 
    let merchantAuthentication: MerchantAuthentication 
    let refId: String 
    let transactionRequest: TransactionRequest 
} 
struct MerchantAuthentication: Codable { 
    let name: String 
    let transactionKey: String 
} 
struct TransactionRequest: Codable { 
    let transactionType: String 
    let amount: String 
    let payment: Payment 
} 
struct Payment: Codable { 
    let opaqueData: OpaqueData 
} 
struct OpaqueData: Codable { 
    let dataDescriptor: String 
    let dataValue: String 
} 

Testing

let json = """ 
    { "createTransactionRequest": 
     { "merchantAuthentication": 
      { "name": "YOUR_API_LOGIN_ID", 
       "transactionKey": "YOUR_TRANSACTION_KEY" 
      }, 
      "refId": "123456", 
      "transactionRequest": 
       { "transactionType": "authCaptureTransaction", 
       "amount": "5", 
       "payment": 
        { "opaqueData": 
         { "dataDescriptor": "COMMON.ACCEPT.INAPP.PAYMENT", 
         "dataValue": "PAYMENT_NONCE_GOES_HERE" 
         } 
        } 
       } 

      } 

      } 
""" 
let jsonData = Data(json.utf8) 
do { 
    let transaction = try JSONDecoder().decode(Transaction.self, from: jsonData) 
    print(transaction) 
    // encoding 
    let encodedData = try JSONEncoder().encode(transaction) 
    print(String(data: encodedData, encoding: .utf8)!) 
} catch { 
    print(error) 
} 

{ "createTransactionRequest": { "merchantAuthentication": { "name ":" YOUR_API_LOGIN_ID "," transactionKey ":" YOUR_TRANSACTION_KEY "}," refId ":" 123456 "," Transaktion Anfrage ": {" transactionType ":" authCaptureTransaction "," Betrag ":" 5 "," Zahlung ": {" opaqueData ": {" dataValue ":" PAYMENT_NONCE_GOES_HERE "," dataDescriptor ":" COMMON.ACCEPT.INAPP.PAYMENT "}}}}}

+0

wie kann ich json {} in swift verwenden. kann ich es ersetzen mit [] –

+1

Was meinst du? Sie sollten Ihre JSON-Zeichenfolge nicht manuell erstellen. –

+0

sorry, idont verstehen json lassen = "" "{ "createTransactionRequest": { "merchantAuthentication": { "name": "YOUR_API_LOGIN_ID", "TransactionKey": "YOUR_TRANSACTION_KEY"}, "refId": "123456" , "Transaction": { "Transaction": "authCaptureTransaction", "Menge": "5", "Zahlung": { "opaqueData": { "dataDescriptor": „COMMON.ACCEPT.INAPP.PAYMENT ", " dataValue ":" PAYMENT_NONCE_GOES_HERE " }}}}} –

Verwandte Themen