2017-02-10 1 views
0

I Coldfusion 2016 verwenden und hier ist das, was ich tue:vorbei json cfhttpparam

<cfhttp method="put" url="https://www.colorfulapi.com/testpage/#arguments.Name#" username="#request.APIusername#" password="#request.APIToken#" result="results"> 
    <cfhttpparam type="header" name="Content-Type" value="application/json"> 
    <cfif isStruct(arguments.structform) AND !StructIsEmpty(arguments.structform)> 
    <CFHTTPPARAM VALUE="'#serializeJSON(stFields)#'" TYPE="body"> 
    </cfif> 
    </cfhttp> 

st wie diese sind: wenn ich sie Dump

'{"ONE":{"GROUP":"my group"}}' 

, wenn es um die cfhttpparam geht mit serializeJSON es zeigt mir, wie:

"error":"JSON error: 822: unexpected token at ''{\"ONE\":{\"GROUP\":\"my group\"}}''"} 

i den gleichen Code in Postbote versucht, aber in POSTman für JSOn Senden ich hatte den Körper als Rohstoff zu verwenden, und wählen Sie Inhalt als application/json und arbeitete dort

Dies ist, wie ich meine stFields bin Erzeugung

<cfset stFields = StructNew()> 
    <cfset stFields.one = arguments.structform> 
    <cfdump var="'#serializeJSON(stFields)#'"> 

Antwort

1

Entfernen Sie die einfachen Anführungszeichen:

<CFHTTPPARAM VALUE="#serializeJSON(stFields)#" TYPE="body"> 

Alte Antwort:

Die serializeJSON function serialisiert Objekte (Strukturen, Arrays, Abfragen, Komponente s, einfache Werte) und gibt den Inhalt als JSON-String aus. Ihre stFields ist bereits ein JSON-String, so gibt es keine Notwendigkeit, es zu serialisieren (wieder):

<CFHTTPPARAM VALUE="#stFields#" TYPE="body"> 
+0

Nein Sein ist nicht Alex, lassen Sie mich schreiben, wie ich die 'stFields' bin zu erzeugen. Ich bearbeite meine Frage –

+0

Ich habe meine Antwort bearbeitet. @weqsd – Alex

+0

Wenn ich einzelne Codes entferne, bekomme ich einen Fehler, der JSON-String an die API weitergegeben hat, ist nicht gültig und das verwirrt viel darüber, was es erwartet –