我有用Java编写的服务器,我在其中创建如下的JSON对象:
@Override
public void serialize(Net net, JsonGenerator jg, SerializerProvider sp) throws IOException, JsonProcessingException {
try {
Set<Place> places = net.getPlaces();
Set<Transition> transitions = net.getTransitions();
JSONObject jsonPlaces = new JSONObject();
for (Place p : places)
{
String id = p.getId();
double xCoord = p.getxCoord();
double yCoord = p.getyCoord();
JSONObject jsonPosition = new JSONObject();
jsonPosition.put("x", xCoord);
jsonPosition.put("y", yCoord);
JSONObject jsonPlace = new JSONObject();
jsonPlace.put("position", jsonPosition);
jsonPlaces.put(id, jsonPlace);
}
jg.writeRawValue(jsonPlaces.toString());
} catch (Exception ex) {
throw new IOException("...", ex);
}
}
结果对象为字符串(jsonPlaces.toString()
)如下所示:
{"id01":{"position":{"x":220,"y":90}},"id02":{"position":{"x":210,"y":250}}}
我使用下面的代码将其发送到我的网络应用程序,它使用serialize()
方法..
@POST
@Path("/blindLayout")
@Consumes(MediaType.APPLICATION_JSON)
public Net blindLayout(Net net) throws Exception {
.
.
return net;
}
这是应该收到响应的angularjs代码
.factory('Layout', function ($http, Notification, AnalysisConfig) {
layoutPrototype.performLayout = function (net, options, defered) {
if (net) {
var address = AnalysisConfig.serverAddress + AnalysisConfig.resourceURI + AnalysisConfig.resources.blindLayout;
$http.post(address, JSON.stringify(net), {timeout: AnalysisConfig.timeout})
.then(function (response) {
var data = response;
},
function (response) {
Notification.error({
title: 'Communication error',
...
});
});
};
};
我的问题是我无法从响应中获取数据。无论我尝试了什么,结果始终是undefined
或[object Object]
。那么我应该如何从响应中获取数据,以便我可以使用alert()
并编写类似
id01 (value of x, value of y)
id02 (value of x, value of y)
...
所以我也可以在我的应用中使用它?
答案 0 :(得分:0)
$http.post(address, JSON.stringify(net), {timeout: AnalysisConfig.timeout})
.then(function (response) {
var data = response.data;
},
返回一个承诺,该承诺使用的对象不仅包含正文,还包含标题和状态。因此,要检索您在后端创建的JSON,您可以执行以下操作:
for(var id in data){
console.log(data[id]) //{"position":{"x":220,"y":90}}
console.log(data[id].position) //{"x":220,"y":90}
}
然后如果你想迭代对象键,你可以做几件事
var arrayOfObjects = Object.keys(data).map(function(id){
return data[id].position;
});
console.log(arrayOfObjects) // [{"x":220,"y":90}, {"x":210,"y":250}]
或
{{1}}