2017-02-08 53 views
0

我想在Java中使用JSON对象生成2d JSON数组。我正在尝试生成以下JSON。在Java中生成2d Json数组

的Java代码..

  JSONObject root = new JSONObject(); 
     JSONObject c0 = new JSONObject(); 
     JSONObject c1 = new JSONObject(); 

     JSONObject attachment = new JSONObject(); 
     JSONObject payload = new JSONObject(); 
     JSONObject buttons = new JSONObject(); 

     root.put("recipient", c0); 
     root.put("message", c1); 

     c0.put("id", userId); 
     c1.put("message", attachment); 

     attachment.put("type", "template"); 
     attachment.put("payload", payload); 

     payload.put("template_type", "button"); 
     payload.put("text", "What do you want to do next"); 
     payload.put("buttons", buttons); 

     buttons.put("type", "web_url"); 
     buttons.put("url", "https://google.com"); 
     buttons.put("title", "show website"); 

     buttons.put("type", "postback"); 
     buttons.put("title", "Hi There"); 
     buttons.put("payload", "sample payload"); 

预期JSON输出 ..

{ 
"recipient":{ 
"id":"USER_ID" 
}, 
"message":{ 
"attachment":{ 
    "type":"template", 
    "payload":{ 
    "template_type":"button", 
    "text":"What do you want to do next?", 
    "buttons":[ 
     { 
     "type":"web_url", 
     "url":"https://google.com", 
     "title":"Show Website" 
     }, 
     { 
     "type":"postback", 
     "title":"Start Chatting", 
     "payload":"Sample_PAYLOAD" 
     } 
    ] 
    } 
    } 
} 
} 

电流输出 ..

{ 
"recipient":{" 
id":"988459377921053" 
}, 
"message":{ 
"message":{" 
    payload":{ 
    "buttons":{ 
     "payload":"sample payload", 
     "type":"postback", 
     "title":"Hi There", 
     "url":"https://google.com" 
     }, 
     "template_type":"button", 
     "text":"What do you want to do next"}, 
     "type":"template" 
     } 
     } 
    } 

我创建嵌套的JSON对象和从外部添加它们仍然内在层面仍然输出JSON不是预期的。无法理解我要出错的地方。

编辑1:

产生由用户@ user1802604但JSON提到试图改变是以下格式的..

{ 
"recipient":{ 
    "id":"988459377921053" 
}, 
"message":{ 
    "attachment":{ 
    "payload":{ 
     "buttons":[ 
      { 
       "payload":"sample payload", 
       "type":"postback", 
       "title":"Hi There", 
       "url":"https://google.com" 
      }, 
      { 
       "payload":"sample payload", 
       "type":"postback", 
       "title":"Hi There", 
       "url":"https://google.com" 
      } 
     ], 
     "template_type":"button", 
     "text":"What do you want to do next" 
    }, 
    "type":"template" 
    } 
    } 
    } 

该API到我发送JSON被返回带有“错误请求”消息的响应代码400。有没有办法保持元素的顺序?

+0

'的JSONObject按钮=新的JSONObject();'应该是一个'JSONArray'保持'JSONObject' – AxelH

回答

2

我认为你的大部分代码都是正确的。只有两个错误需要修复。

请注意,我不确定你用什么库来表示json,所以下面的代码可能不完全正确。我假设你使用的是org.json。

  1. c1.put("message", attachment);应该是c1.put("attachment", attachment);
  2. JSONObject buttons = new JSONObject();应创建为JSONArray buttons = new JSONArray();。所以你还必须创建另一个json对象来存储type,titleurl

    JSONArray buttons = new JSONArray(); 
    
    JSONObject button1 = new JSONObject(); 
    button1.put("type", "web_url"); 
    button1.put("url", "https://google.com"); 
    button1.put("title", "show website"); 
    buttons.put(button1); 
    
    JSONObject button2 = new JSONObject(); 
    button2.put("payload", "postback"); 
    button2.put("url", "Sample_PAYLOAD"); 
    button2.put("title", "Start Chatting"); 
    buttons.put(button2); 
    
+0

如上的编辑的问题看出,我想你的变化,但所产生的JSON有因为我发送JSON的API的元素的不同顺序返回“400-错误的请求”错误...有没有办法保存JSON中的各种元素的顺序? – Lucy

+0

一般来说,json对象不会保留键的顺序。只有json数组确保元素的顺序。我不认为'坏请求'的原因是由订单造成的。是否有任何线索表明错误? – user1802604

+0

我检查了但找不到任何其他的错误原因。是否有一个强制json obj元素的顺序?如果不是,那么有什么选择? – Lucy

0

该代码的JSONObject

buttons.put("type", "web_url"); 
    buttons.put("url", "https://google.com"); 
    buttons.put("title", "show website"); 

    buttons.put("type", "postback"); 
    buttons.put("title", "Hi There"); 
    buttons.put("payload", "sample payload"); 

设置值既然有两次,每次按键,你重写的第一个值。

你想要的是将一个JSONObject实例添加到JSONArray buttons

JSONArray arrayButton= new JSONArray(); 

JSONObject button.put("type", "web_url"); 
button.put("url", "https://google.com"); 
button.put("title", "show website"); 
arrayButton.put(button); 

button.put("type", "postback"); 
button.put("title", "Hi There"); 
button.put("payload", "sample payload"); 
arrayButton.put(button); 

将每个对象添加到数组中。然后只需添加您构建的数组。