Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Jackson for Android(Java)解析JSON文件_Java_Android_Json_Jackson - Fatal编程技术网

使用Jackson for Android(Java)解析JSON文件

使用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) {

标题说明一切。试图简单地解析我通过Jackson添加到这个android项目中的JSON文件,以便在整个应用程序中使用

我能够在一个普通的Java应用程序中成功地做到这一点,但由于未知的原因,我无法在Android项目中做到这一点。将发布这两个代码

Android代码:

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());
        }
    }

}