从字符串中读取值

时间:2014-11-09 02:53:02

标签: java android string

我有一个字符串,其中包含一些“名称”和“值”。 数据存储的样式如下:

{"userId":6625,"OtherName":"blabla","isfirst":"true"}

我想知道如何在此字符串中获取“othername”的值, 或者我怎样才能获得“某些名字”的价值?

我有自己编写的代码:

        String str1;
try {
            str1 = getStringFromFile(getApplicationContext().getFilesDir().getAbsolutePath()+"/myinfo.txt");
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            str1 = "";
        }
        String str2;
        try{
        int startindeofuserid=str1.indexOf("userId");
        int lastindexofuserid = str1.indexOf(",", startindeofuserid);
        startindeofuserid = str1.indexOf(":", startindeofuserid);
        str2 = str1.substring(startindeofuserid, lastindexofuserid);
        str2 = str2.replaceAll(":", "");
        str2 = str2.replaceAll("\"", "");
        str2 = str2.replaceAll(" ", "");
        str2 = str2.replaceAll("'", "");
//For safety , cause my userid is just a long value.
        }catch(Exception e){
            str2 ="*"; 
        }

它工作正常,但在某些设备中,我得到了不寻常的答案。 我只是想知道,是以下字符串,有某种数据存储方法吗? 是否有一个库将该字符串读入列表或数组?

6 个答案:

答案 0 :(得分:0)

您的存储格式类似于json,因此您可以使用任何json解析器。例如:gson,jackson。

答案 1 :(得分:0)

您的字符串是 json格式
您可以通过使用字符串创建JSONObject来获取字符串中的值,然后可以使用JSONObject中的get方法获取值。对于那个第一个

将字符串传递给JSONObject

JSONObject obj = new JSONObject(str);

JSONObject

获取值
userID = jsonObject.get("userId"); // will return 6625
otherName = jsonObject.get("OtherName"); // will return blabla
isFirst = jsonObject.get("isfirst"); // will return true

检查此link以获取示例。

答案 2 :(得分:0)

按':'拆分字符串时,用':'拆分。 你会得到这样的数组:

["Some Name", "6625"]
["OtherName", "blabla"]
["isfirst", "true"]

之后按类型解析值。

答案 3 :(得分:0)

这可以帮助你...将你的文字变成字符串my_json。然后使用以下代码

            if (my_json != null) {
                try {
                     jsonObj = new JSONObject(my_json);

                    if (jsonObj != null) {

                    int userId = jsonObj.getInt("userId");
                    String OtherName = jsonObj.getString("OtherName");
                           Log.e("OtherName",OtherName);



                    }

                } catch (JSONException e) {
                    e.printStackTrace();

                }

            } else {

                Log.e("JSON Data", "Didn't receive any data from server!");
            }

答案 4 :(得分:0)

您可以使用Gson。将gson jar添加到项目构建路径。

        String  test ="{\"Some Name\":6625,\"OtherName\":\"blabla\",\"isfirst\":\"true\"}";

        Type type = new TypeToken<HashMap<String, String>>() {}.getType();
        System.out.println(new Gson().fromJson(test, type));        

        HashMap map =new Gson().fromJson(test, type);
        System.out.println(map.get("Some Name"));
        System.out.println(map.get("OtherName"));
        System.out.println(map.get("isfirst"));

答案 5 :(得分:0)

首先,正如其他人所鼓励,绝对使用解析器,我自己使用杰克逊。

查看您的数据&#34;,有一个奇怪的观点:

"isfirst":"true"

如果您的意图是由解析器将其转换为布尔值,那么您将不会对该值有引号。也就是说,上面是一个字符串,低于布尔值:

"isfirst" : true

以下内容可能对json的语法有所帮助: http://www.json.org/