我有一个字符串,其中包含一些“名称”和“值”。 数据存储的样式如下:
{"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 ="*";
}
它工作正常,但在某些设备中,我得到了不寻常的答案。 我只是想知道,是以下字符串,有某种数据存储方法吗? 是否有一个库将该字符串读入列表或数组?
答案 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/