使用Jackson for Android(Java)解析JSON文件
标题说明一切。试图简单地解析我通过Jackson添加到这个android项目中的JSON文件,以便在整个应用程序中使用 我能够在一个普通的Java应用程序中成功地做到这一点,但由于未知的原因,我无法在Android项目中做到这一点。将发布这两个代码 Android代码:使用Jackson for Android(Java)解析JSON文件,java,android,json,jackson,Java,Android,Json,Jackson,标题说明一切。试图简单地解析我通过Jackson添加到这个android项目中的JSON文件,以便在整个应用程序中使用 我能够在一个普通的Java应用程序中成功地做到这一点,但由于未知的原因,我无法在Android项目中做到这一点。将发布这两个代码 Android代码: public class MainActivity extends ActionBarActivity { protected void onCreate(Bundle savedInstanceState) {
public class MainActivity extends ActionBarActivity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ObjectMapper mapper = new ObjectMapper();
InputStream is = MainActivity.class.getResourceAsStream("contacts.json");
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
List<Contact> contacts = null;
Contact contact = null;
try {
// THIS IS THE LINE THAT BREAKS
contacts = mapper.readValue(is, TypeFactory.defaultInstance().constructCollectionType(List.class, Contact.class));
contact = contacts.get(0);
} catch (JsonParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JsonMappingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
这是错误的日志:
com.fasterxml.jackson.databind.JsonMappingException: No content to map due to end-of-input
我已经搜索了这么多,还没有找到解决这个琐碎任务的方法。我还想知道为什么这段代码可以在Java应用程序中工作,而不能在Android项目中工作。如果onCreate可以像Java应用程序中的Main一样抛出这些异常,我认为它可以工作,但显然不行。提前感谢您的解决方案
仅供参考,下面是我使用Jackson解析JSON文件的Java应用程序代码
package test;
// file with accessors and mutators for JSON
import test.Contact;
import java.io.IOException;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.type.TypeFactory;
import com.fasterxml.jackson.core.JsonParseException;
import java.io.InputStream;
import java.util.List;
public class test {
public static void main(String[] args) throws JsonParseException, JsonMappingException, IOException {
ObjectMapper mapper = new ObjectMapper();
InputStream is = test.class.getResourceAsStream("contacts.json");
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
List<Contact> contacts = mapper.readValue(is, TypeFactory.defaultInstance().constructCollectionType(List.class, Contact.class));
// point to first contact
Contact contact = contacts.get(0);
for (int i = 0; i < contacts.size(); i++) {
contact = contacts.get(i);
System.out.println(contact.getName());
System.out.println(contact.getEmployeeId());
System.out.println(contact.getCompany());
System.out.println(contact.getDetailsURL());
System.out.println(contact.getSmallImageURL());
System.out.println(contact.getBirthdate());
System.out.println(contact.getPhone().getWork());
System.out.println(contact.getPhone().getHome());
System.out.println(contact.getPhone().getMobile());
}
}
}
封装测试;
//带有JSON访问器和变异器的文件
进口测试。联系方式;
导入java.io.IOException;
导入com.fasterxml.jackson.databind.DeserializationFeature;
导入com.fasterxml.jackson.databind.JsonMappingException;
导入com.fasterxml.jackson.databind.ObjectMapper;
导入com.fasterxml.jackson.databind.type.TypeFactory;
导入com.fasterxml.jackson.core.JsonParseException;
导入java.io.InputStream;
导入java.util.List;
公开课考试{
公共静态void main(字符串[]args)抛出JsonParseException、JsonMappingException、IOException{
ObjectMapper mapper=新的ObjectMapper();
InputStream=test.class.getResourceAsStream(“contacts.json”);
configure(在未知属性上反序列化feature.FAIL,false);
List contacts=mapper.readValue(is,TypeFactory.defaultInstance().constructionCollectionType(List.class,Contact.class));
//指向第一次接触
联系人=联系人。获取(0);
对于(int i=0;i
从android的角度来看,似乎无法找到该文件,或者您用来移动JSON文件的任何东西都不会移动整个JSON文件。哇,是的。总是这样。问题是我的JSON文件在资产文件夹中,InputStream没有从中读取。@LeliahJane很好,很高兴听到您解决了问题!:)
package test;
// file with accessors and mutators for JSON
import test.Contact;
import java.io.IOException;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.type.TypeFactory;
import com.fasterxml.jackson.core.JsonParseException;
import java.io.InputStream;
import java.util.List;
public class test {
public static void main(String[] args) throws JsonParseException, JsonMappingException, IOException {
ObjectMapper mapper = new ObjectMapper();
InputStream is = test.class.getResourceAsStream("contacts.json");
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
List<Contact> contacts = mapper.readValue(is, TypeFactory.defaultInstance().constructCollectionType(List.class, Contact.class));
// point to first contact
Contact contact = contacts.get(0);
for (int i = 0; i < contacts.size(); i++) {
contact = contacts.get(i);
System.out.println(contact.getName());
System.out.println(contact.getEmployeeId());
System.out.println(contact.getCompany());
System.out.println(contact.getDetailsURL());
System.out.println(contact.getSmallImageURL());
System.out.println(contact.getBirthdate());
System.out.println(contact.getPhone().getWork());
System.out.println(contact.getPhone().getHome());
System.out.println(contact.getPhone().getMobile());
}
}
}