Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.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
Java 教授';s的研究生给出了JSON数据,该数据的结构不正确,无法作为用户的JSON数组_Java_Android_Json_Getjson - Fatal编程技术网

Java 教授';s的研究生给出了JSON数据,该数据的结构不正确,无法作为用户的JSON数组

Java 教授';s的研究生给出了JSON数据,该数据的结构不正确,无法作为用户的JSON数组,java,android,json,getjson,Java,Android,Json,Getjson,下面是我试图解析的JSONObject的外观: Exception in thread "main" java.util.NoSuchElementException at java.util.HashMap$HashIterator.nextNode(HashMap.java:1431) at java.util.HashMap$KeyIterator.next(HashMap.java:1453) at DataParse.parseFeed(DataParse.java:61) at in

下面是我试图解析的JSONObject的外观:

Exception in thread "main" java.util.NoSuchElementException
at java.util.HashMap$HashIterator.nextNode(HashMap.java:1431)
at java.util.HashMap$KeyIterator.next(HashMap.java:1453)
at DataParse.parseFeed(DataParse.java:61)
at intellidealsbackend.main(intellibackend.java:25)
这是我对解析器的实现:

  {
users: {
276c7438-2b6a-4d92-a5f8-4a9e9007efa8: {
email: "power.nit@gmail.com",
username: "power nit"
},

de977b2f-2243-425c-9dfe-9f1443e41303: {
email: "denvervronkos@gmail.com",
username: "Denver vronkos"
},
e73cd6c9-9577-4cdc-b8fe-4227ac227c6b: {
email: "ls@gmail.com",
username: "laveena sharma"
}
},
visited: {
2fe51b4a-60b9-42cf-a889-bb607a5ea9bd: {
-KGWYAYM_iW6vi_SGBq3: {
condition: "clear sky",
date: "29 Apr 2016",
degree: "59.90360000000002",
latitude: "33.7932608",
longitude: "-118.1359034",
placeType: "Shopping Mall",
placeVisited: "Los Altos Mall",
time: "03:24",
uid: "3b0b90ce-8d13-4c7b-ab5b-b453aa9fabc5",
username: "kunal bolia"
},
-KGWYK9wH7UPcXMNCisY: {
condition: "clear sky",
date: "29 Apr 2016",
degree: "59.90360000000002",
latitude: "33.79330768",
longitude: "-118.13585834",
placeType: "Shopping Mall",
placeVisited: "Los Altos Mall",
time: "03:25",
uid: "3b0b90ce-8d13-4c7b-ab5b-b453aa9fabc5",
username: "kunal bolia"
}
},
68ebe7a6-7344-4d50-b647-16bb830ad413: {
-KGWB4NOqJGg6DNSPN1n: {
condition: "clear sky",
date: "29 Apr 2016",
degree: "59.90360000000002",
latitude: "33.7932834",
longitude: "-118.135812",
placeType: "Shopping Mall",
placeVisited: "Los Altos Mall",
time: "01:43",
uid: "68ebe7a6-7344-4d50-b647-16bb830ad413",
username: "bat man"
},
-KGWBIvlt9pUQOrJgK0p: {
condition: "clear sky",
date: "29 Apr 2016",
degree: "59.90360000000002",
latitude: "33.79357387",
longitude: "-118.13580848",
placeType: "Shopping Mall",
placeVisited: "Los Altos Mall",
time: "01:44",
uid: "68ebe7a6-7344-4d50-b647-16bb830ad413",
username: "bat man"
},
-KGWQi36kjznhtMerapt: {
condition: "clear sky",
date: "29 Apr 2016",
degree: "59.90360000000002",
latitude: "33.7932608",
longitude: "-118.1359034",
placeType: "Shopping Mall",
placeVisited: "Los Altos Mall",
time: "02:52",
uid: "68ebe7a6-7344-4d50-b647-16bb830ad413",
username: "bat man"
}
} 
import java.util.ArrayList;
导入java.util.Iterator;
导入java.util.List;
导入java.util.Map;
导入java.util.Set;
导入org.json.JSONArray;
导入org.json.JSONException;
导入org.json.JSONObject;
公共类数据解析{
私有静态列表UID;
公共静态列表源(字符串内容){
试一试{
List dataList=new ArrayList();
uids=新的ArrayList();
//获取根节点
JSONObject数据=新的JSONObject(内容);
if(data.has(“用户”)&&data.has(“已访问”)&&&!data.isNull(“用户”)&&&!data.isNull(“已访问”)){
//我们得到父节点
JSONObject userObj=data.getJSONObject(“用户”);
JSONObject visitedObj=data.getJSONObject(“已访问”);
//从JSON对象获取其键的映射
JSONToMap jtm=新的JSONToMap();
Map userId=jtm.jsonToMap(userObj);
//这些是来自所有用户的密钥
Set userKeys=userId.keySet();
uids.addAll(用户密钥);
for(迭代器i=userKeys.Iterator();i.hasNext();){
//布尔测试=visitedObj.isNull(i.next().toString());
如果(visitedObj.isNull(i.next().toString())| |!visitedObj.has(i.next().toString())){
继续;
}                   
否则{
JSONObject visitedDatauid=visitedObj.getJSONObject(i.next().toString());
//从JSON对象获取其键的映射
JSONToMap jtmPushKeys=新的JSONToMap();
Map pushKeys=jtmPushKeys.jsonToMap(visitedDatauid);
Set pKeys=pushKeys.keySet();
//在推入式android中迭代uid->唯一键
for(迭代器j=pKeys.Iterator();j.hasNext();)
{
//访问特定uid“i”的按键“j”数据
如果(!(visitedDatauid.isNull(j.next().toString())&(visitedDatauid.has(j.next().toString())){
JSONObject visitdata=visitedDatauid.getJSONObject(j.next().toString());
//字符串uidIter=i.next().toString();
//JSONObject user=userObj.getJSONObject(i.next().toString());
//从JSONObject获取数据并以字符串形式存储
字符串uid=“”,username=“”,email=“”,placevisted=“”,lat=“”,lon=“”,condition=“”;
//字符串uid=“”,username=“”,email=“”,placevisted=“”,lat=“”,lon=“”,condition=“”;
uid=visitdata.getString(“uid”);
username=visitdata.getString(“用户名”);
//email=user.getString(“电子邮件”);
placevisited=visitdata.getString(“placevisited”);
lat=visitdata.getString(“纬度”);
lon=visitdata.getString(“经度”);
condition=visitdata.getString(“condition”);
//DataModal dm=新的DataModal(电子邮件、uid、用户名、lat、lon、访问地点、条件);
DataModal dm=新的DataModal(uid、用户名、lat、lon、访问地点、条件);
dataList.add(dm);
}
否则{
System.err.println(“已访问键:+j.next().toString()+”在已访问中不存在”);
字符串uid=“”,username=“”,email=“”,placevisted=“”,lat=“”,lon=“”,condition=“”;
//字符串uid=“”,username=“”,email=“”,placevisted=“”,lat=“”,lon=“”,condition=“”;
uid=i.next().toString();
username=“NA”;
电子邮件=“NA”;
“NA”;
lat=“NA”;
lon=“NA”;
条件=“NA”;
DataModal dm=新的DataModal(uid、用户名、lat、lon、访问地点、条件);
dataList.add(dm);
继续;
}
}
}
}               
}
返回数据列表;
}捕获(JSONException e){
e、 printStackTrace();
返回null;
}
}
}

我一直在试着调试它。当迭代器命中null或访问节点中不存在的值时,它会抛出NoTouchElementException,即使我有检查条件,代码仍会抛出此错误

我在互联网上搜索过,只找到了json.has(key)和json.isNull(key)的检查,我已经在执行了。我如何解决这个问题


谢谢,我真的很感谢你的帮助。

每次你想得到下一个你呼叫的对象时

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

public class DataParse {


private static List<String> uids;


public static List<DataModal> parseFeed(String content) {
    try {

            List<DataModal> dataList = new ArrayList<>();
            uids = new ArrayList<>();

            //get root node
            JSONObject data = new JSONObject(content);
            if(data.has("users")&& data.has("visited")&& !data.isNull("users")&& !data.isNull("visited")){
                // We get parent nodes
                JSONObject userObj = data.getJSONObject("users");
                JSONObject visitedObj = data.getJSONObject("visited");

                //get map from JSON object for its keys
                JSONToMap jtm = new JSONToMap();
                Map<String,Object> userId =  jtm.jsonToMap(userObj);

                //these are the keys from all the users
                Set<String> userKeys = userId.keySet();

                uids.addAll(userKeys);

                for(Iterator i = userKeys.iterator();i.hasNext();){

                    //boolean test = visitedObj.isNull(i.next().toString());

                    if(visitedObj.isNull(i.next().toString())||!visitedObj.has(i.next().toString())){

                        continue;
                    }                   
                    else{

                        JSONObject visitedDatauid = visitedObj.getJSONObject(i.next().toString());
                        //get map from JSON object for its keys

                        JSONToMap jtmPushKeys = new JSONToMap();
                        Map<String,Object> pushKeys =  jtmPushKeys.jsonToMap(visitedDatauid);
                        Set<String> pKeys = pushKeys.keySet();
                        //iterate through uid -> unique keys from push in android
                            for(Iterator j = pKeys.iterator();j.hasNext();)
                            {

                                //access push key 'j' data for particular uid 'i'
                                if(!(visitedDatauid.isNull(j.next().toString()))&& (visitedDatauid.has(j.next().toString()))){

                                    JSONObject visitdata = visitedDatauid.getJSONObject(j.next().toString());

                                    //String uidIter = i.next().toString(); 


                                            //JSONObject user = userObj.getJSONObject(i.next().toString());

                                            //Get data from JSONObjects and store in Strings
                                            String uid="",username="",email="",placevisited="",lat="",lon="", condition ="";

                                            //String uid="",username="",email="",placevisited="",lat="",lon="", condition ="";

                                            uid = visitdata.getString("uid");
                                            username = visitdata.getString("username");
                                            //email = user.getString("email");
                                            placevisited = visitdata.getString("placeVisited");
                                            lat = visitdata.getString("latitude");
                                            lon = visitdata.getString("longitude");
                                            condition = visitdata.getString("condition");

                                            //DataModal dm = new DataModal(email,uid,username,lat,lon,placevisited,condition);
                                            DataModal dm = new DataModal(uid,username,lat,lon,placevisited,condition);
                                            dataList.add(dm);

                                        }

                                    else{

                                        System.err.println("Visited key:"+j.next().toString()+" do not exist in Visited");

                                        String uid="",username="",email="",placevisited="",lat="",lon="", condition ="";

                                        //String uid="",username="",email="",placevisited="",lat="",lon="", condition ="";

                                        uid = i.next().toString();
                                        username = "NA";
                                        email = "NA";
                                        placevisited = "NA";
                                        lat = "NA";
                                        lon = "NA";
                                        condition = "NA";

                                        DataModal dm = new DataModal(uid,username,lat,lon,placevisited,condition);
                                        dataList.add(dm);
                                        continue;
                                    }

                                }

                            }
                        }               
                }


            return dataList;
    } catch (JSONException e) {
        e.printStackTrace();
        return null;
    }

}
无论何时调用i.next()迭代器将移动到下一个位置并将对象返回给您。 因此,您应该指定i.next()调停
 i.next();
{
"users": [{
    "276c7438-2b6a-4d92-a5f8-4a9e9007efa8": {
        "email": "power.nit@gmail.com",
        "username": "power nit"
    },
    "de977b2f-2243-425c-9dfe-9f1443e41303": {
        "email": "denvervronkos@gmail.com",
        "username": "Denver vronkos"
    },
    "e73cd6c9-9577-4cdc-b8fe-4227ac227c6b": {
        "email": "ls@gmail.com",
        "username": "laveena sharma"
    }
}]
}