Используйте функцию callback()
внутри успеха foo()
. Попробуйте таким образом. Это просто и легко понять. & nbsp;
var lat = "";
var lon = "";
function callback(data) {
lat = data.lat;
lon = data.lon;
}
function getLoc() {
var url = "http://ip-api.com/json"
$.getJSON(url, function(data) {
callback(data);
});
}
getLoc();
Взгляните на это обсуждение: http://jackson-users.ning.com/forum/topics/detecting-duplicate-field
Вот пример кода который выходит из него для класса карты:
public class JacksonDuplicates {
private static final String JSON = "{\n" +
" \"field1\" : 1,\n" +
" \"field1\" : 2,\n" +
" \"map\" : {\n" +
" \"1\" : {\n" +
" \"fieldA\" : \"null\",\n" +
" \"fieldB\" : \"2\"\n" +
" },\n" +
" \"1\" : {\n" +
" \"fieldX\" : \"null\",\n" +
" \"fieldY\" : \"2\"\n" +
" }\n" +
" }\n" +
"}";
private static class SingleKeyHashMap<K, V> extends HashMap<K, V> {
@Override
public V put(K key, V value) {
if (containsKey(key)) {
throw new IllegalArgumentException("duplicate key " + key);
}
return super.put(key, value);
}
}
public static void main(String[] args) throws IOException {
SimpleModule module = new SimpleModule();
module.addAbstractTypeMapping(Map.class, SingleKeyHashMap.class);
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(module);
mapper.readValue(JSON, Map.class);
}
}
Выход:
Exception in thread "main" java.lang.IllegalArgumentException: duplicate key field1
at jackson.JacksonDuplicates$SingleKeyHashMap.put(JacksonDuplicates.java:38)
at com.fasterxml.jackson.databind.deser.std.MapDeserializer._readAndBindStringMap(MapDeserializer.java:434)
at com.fasterxml.jackson.databind.deser.std.MapDeserializer.deserialize(MapDeserializer.java:312)
at com.fasterxml.jackson.databind.deser.std.MapDeserializer.deserialize(MapDeserializer.java:26)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:2993)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2098)
at jackson.JacksonDuplicates.main(JacksonDuplicates.java:50)
Может использовать JsonParser.Feature.STRICT_DUPLICATE_DETECTION
ObjectMapper mapper = new ObjectMapper();
mapper.enable(JsonParser.Feature.STRICT_DUPLICATE_DETECTION);
MyPOJO result = mapper.readValue(json, MyPOJO.class);
Результаты в:
com.fasterxml.jackson.core.JsonParseException: Duplicate field 'field1'
Как использовать Jackson для проверки дублированных свойств? сообщение о DeserializationFeature.FAIL_ON_READING_DUP_TREE_KEY