java - json 数组遇到问题

标签 java android eclipse json

首先感谢您花时间查看我的问题,我是 Android 开发新手,我遇到了来自以 JSON 编码的 PHP 服务器的数组的问题,我尝试寻找答案,但全部JSON的例子使用字段名来解码数组,我的没有字段名。

这是可以包含多个字符串的数组的示例:

[["104733","\u5e38\u4e16\u7530 \u9752","images\/myphoto\/104733_20120711101030_sq_s.jpg","062556","2012\/11\/21","test20121121-2","Test2\n\u643a\u5e2f\u304b\u3089","11.11","333.33","555.55","77.77","22:22:22","20:44:44","19:07:06","17:29:28",0," ","0"," "," ","61116",0," "]
,["104733","\u5e38\u4e16\u7530 \u9752","images\/myphoto\/104733_20120711101030_sq_s.jpg","062555","2012\/11\/21","test20121121","Test\n\u643a\u5e2f\u304b\u3089","11.11","333.33","555.55","77.77","22:22:22","20:44:44","19:07:06","17:29:28",0," ","0"," "," ","61117",0," "]]

基本上,\u643a\u5e2f\u304b\u3089 是日语中的“携帯から”字符。

我设法使用这种循环手动分隔字段,但仍然以编码格式获取名称。

                       for(int i=0; i<num; i++){
            //Separate the string in to the different groups
            endIdx = strcline.indexOf("]", startIdx)+1;
            String temp = strcline.substring(startIdx, endIdx);

            //Get the user id from the string temp
            startIdx2 = 2;
            endIdx2 = temp.indexOf(",", startIdx2) - 1;
            String userId = temp.substring(startIdx2, endIdx2);
            Log.v("temp", userId);
            startIdx2 = endIdx2 + 3;

            //Get the user name
            endIdx2 = temp.indexOf(",", startIdx2) - 1;
            String userName = temp.substring(startIdx2, endIdx2);
            Log.w("temp", userName);
            //String userName2 = new String(userName.getBytes(), "UTF-8");

            //Log.d("fullurl", userName2);
            //Log.w("temp", String.valueOf(userName2));
            startIdx2 = endIdx2 + 3;

            //Get the user photo url
            endIdx2 = temp.indexOf(",", startIdx2) - 1;
            String userPhoto = temp.substring(startIdx2, endIdx2);
            Log.d("temp", userPhoto);
            startIdx2 = endIdx2 + 3;

            //Get the training id
            endIdx2 = temp.indexOf(",", startIdx2) - 1;
            String trainingId = temp.substring(startIdx2, endIdx2);
            Log.d("temp", trainingId);
            startIdx2 = endIdx2 + 3;

            //Get the diary's date
            endIdx2 = temp.indexOf(",", startIdx2) - 1;
            String diaryDate = temp.substring(startIdx2, endIdx2);
            Log.d("temp", diaryDate);
            startIdx2 = endIdx2 + 3;

            //Get the Diary's title
            endIdx2 = temp.indexOf(",", startIdx2) - 1;
            String diaryTitle = temp.substring(startIdx2, endIdx2);
            Log.d("temp", diaryTitle);
            startIdx2 = endIdx2 + 3;

            //Get the diary's content
            endIdx2 = temp.indexOf(",", startIdx2) - 1;
            String diaryContent = temp.substring(startIdx2, endIdx2);
            Log.d("temp", diaryContent);
            startIdx2 = endIdx2 + 3;

            //Get the swim distance
            endIdx2 = temp.indexOf(",", startIdx2) - 1;
            String swimDistance = temp.substring(startIdx2, endIdx2);
            Log.d("temp", swimDistance);
            startIdx2 = endIdx2 + 3;

            //Get the bike distance
            endIdx2 = temp.indexOf(",", startIdx2) - 1;
            String bikeDistance = temp.substring(startIdx2, endIdx2);
            Log.d("temp", bikeDistance);
            startIdx2 = endIdx2 + 3;

            //Get the run distance
            endIdx2 = temp.indexOf(",", startIdx2) - 1;
            String runDistance = temp.substring(startIdx2, endIdx2);
            Log.d("temp", runDistance);
            startIdx2 = endIdx2 + 3;

            //Get the other distance
            endIdx2 = temp.indexOf(",", startIdx2) - 1;
            String otherDistance = temp.substring(startIdx2, endIdx2);
            Log.d("temp", otherDistance);
            startIdx2 = endIdx2 + 3;

            //Get the swim time
            endIdx2 = temp.indexOf(",", startIdx2) - 1;
            String swimTime = temp.substring(startIdx2, endIdx2);
            Log.d("temp", swimTime);
            startIdx2 = endIdx2 + 3;

            //Get the bike time
            endIdx2 = temp.indexOf(",", startIdx2) - 1;
            String bikeTime = temp.substring(startIdx2, endIdx2);
            Log.d("temp", bikeTime);
            startIdx2 = endIdx2 + 3;

            //Get the run time
            endIdx2 = temp.indexOf(",", startIdx2) - 1;
            String runTime = temp.substring(startIdx2, endIdx2);
            Log.d("temp", runTime);
            startIdx2 = endIdx2 + 3;

            //Get the other time
            endIdx2 = temp.indexOf(",", startIdx2) - 1;
            String otherTime = temp.substring(startIdx2, endIdx2);
            Log.d("temp", otherTime);
            startIdx2 = endIdx2 + 2;

            //Get the number of photos
            endIdx2 = temp.indexOf(",", startIdx2);
            String numPhotos = temp.substring(startIdx2, endIdx2);
            Log.d("temp", numPhotos);
            startIdx2 = endIdx2 + 2;

            //Get the string for the Photos
            endIdx2 = temp.indexOf(",", startIdx2) - 1;
            String stringPhotos = temp.substring(startIdx2, endIdx2);
            Log.d("temp", stringPhotos);
            startIdx2 = endIdx2 + 3;

            //Get the like flag
            endIdx2 = temp.indexOf(",", startIdx2) - 1;
            String likeFlg = temp.substring(startIdx2, endIdx2);
            Log.d("temp", likeFlg);
            startIdx2 = endIdx2 + 3;

            //Get the name of friend who liked
            endIdx2 = temp.indexOf(",", startIdx2) - 1;
            String friendLiked = temp.substring(startIdx2, endIdx2);
            Log.d("temp", friendLiked);
            startIdx2 = endIdx2 + 3;

            //Get the string for the likes
            endIdx2 = temp.indexOf(",", startIdx2) - 1;
            String stringLike = temp.substring(startIdx2, endIdx2);
            Log.d("temp", stringLike);
            startIdx2 = endIdx2 + 3;

            //Get the id for this array
            endIdx2 = temp.indexOf(",", startIdx2) - 1;
            String arrayId = temp.substring(startIdx2, endIdx2);
            Log.d("temp", arrayId);
            startIdx2 = endIdx2 + 2;

            //Get the number of comments
            endIdx2 = temp.indexOf(",", startIdx2);
            String numberComments = temp.substring(startIdx2, endIdx2);
            Log.d("temp", numberComments);
            startIdx2 = endIdx2 + 2;

            //Get the string for the comments
            endIdx2 = temp.indexOf("]", startIdx2) - 1;
            String stringComments = temp.substring(startIdx2, endIdx2);
            Log.e("temp", stringComments);

            startIdx = endIdx + 1;

            arrayTemp[i] = temp;
            Log.w("LogStr", temp);
        }

最佳答案

您的 json 是字符串数组的数组,这就是您没有字段名称的原因。它们仅存在于对象中。

用字符串操作解析 json 是一件痛苦的事情。您应该查看 org.json 包中的类,并在此处开始使用 JSONArray 进行解析。

JSONArray a1 = new JSONArray(json);
for (int i = 0; i < a1.length(); i++) {
    JSONArray a2 = a1.getJSONArray(i);
    for (int j = 0; j < a2.length(); j++) {
    String s1 = a2.getString(j);
        // ...
    }
}

关于java - json 数组遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13506726/

相关文章:

python - 如何安装pandas在Eclipse下运行

java - 将 GPS 坐标传递给 Activity

android - 如何在 Android 中创建登录表单?

java - Android 应用程序可以通过代码承担动态着色图像资源的责任吗?

java - Tomcat 7 问题 - 无法启动服务器实例

eclipse - App Engine 1.7.6 中的 PyDev 断点坏了吗?

java - 如何使用 gradle 任务运行 Shadow jar?

java - 在创建没有 setter 的不可变类时,为什么我要声明一个字段为 Final

java - getRaster 方法中出现数组越界异常

Java 数组分级