在PHP中构建HTTP POST查询时,我可以使用一个名为http_build_query的简单方法,该方法将根据传递给函数的数组返回以下内容:
简单数组:
Array
(
[0] => foo
[1] => bar
[2] => baz
[3] => boom
[cow] => milk
[php] => hypertext processor
)
返回:
flags_0=foo&flags_1=bar&flags_2=baz&flags_3=boom&cow=milk&php=hypertext+processor
有点复杂的数组:
Array
(
[user] => Array
(
[name] => Bob Smith
[age] => 47
[sex] => M
[dob] => 5/12/1956
)
[pastimes] => Array
(
[0] => golf
[1] => opera
[2] => poker
[3] => rap
)
[children] => Array
(
[bobby] => Array
(
[age] => 12
[sex] => M
)
[sally] => Array
(
[age] => 8
[sex] => F
)
)
[0] => CEO
)
返回:
user%5Bname%5D=Bob+Smith&user%5Bage%5D=47&user%5Bsex%5D=M&user%5Bdob%5D=5%2F12%2F1956&pastimes%5B0%5D=golf&pastimes%5B1%5D=opera&pastimes%5B2%5D=poker&pastimes%5B3%5D=rap&children%5Bbobby%5D%5Bage%5D=12&children%5Bbobby%5D%5Bsex%5D=M&children%5Bsally%5D%5Bage%5D=8&children%5Bsally%5D%5Bsex%5D=F&flags_0=CEO
我要问的是,有没有办法在Java / Android中创建后一种实体格式?我没有运气就试过以下内容:
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(3);
nameValuePairs.add(new BasicNameValuePair("user", null));
nameValuePairs.add(new BasicNameValuePair("firstname", "admin"));
nameValuePairs.add(new BasicNameValuePair("lastname", "admin"));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
希望有人知道如何实现这个:) 亲切的问候, 的Morten
编辑:
基本上我需要的是产生这个PHP的Java等价物:
$params = array('user' => array(
'firstname' => 'Bob Smith',
'lastname' => 'Johnson'
));
这是JSON格式的相同请求:
{"user":{"firstname":"Bob Smith","lastname":"Johnson"}}
我只需要application / x-www-form-urlencoded格式的Java等价物;)
顺便说一句。非常感谢回答sudocode,非常感谢它!
答案 0 :(得分:1)
我知道了。这是示例代码:
String data = EntityUtils.toString(new UrlEncodedFormEntity(nameValuePairs,"UTF-8"));
data = "&" + data.replaceAll("%5B0%5D", "[0]");
StringEntity se = new StringEntity(data, "UTF-8");
se.setContentType("application/x-www-form-urlencoded");
se.setContentEncoding("UTF-8");
httppost.setEntity(se);
有点讨厌,但它正在发挥作用。您可能希望它更通用 - 这仅适用于1元素数组。
答案 1 :(得分:0)
我认为你的代码是正确的,但是你对它应该产生什么输出的期望是不正确的。我认为您不应期望您的参数名称用方括号括起来(urlencoded:%5B和%5D)。
如果需要,则需要在Java代码中添加括号,例如
nameValuePairs.add(new BasicNameValuePair("[firstname]", "admin"));