json是用来干嘛的(json中文意思)
大家好,关于json是用来干嘛的很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于json中文意思的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!
steamtools的json干嘛用的
SteamTools的JSON主要用于保存提取的游戏信息,并作为中间格式实现数据转换与批量导入Steam库的功能。其核心作用体现在以下方面:
1.数据存储与结构化JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,SteamTools通过它以结构化方式保存从其他来源(如本地文件、第三方数据库或手动输入)提取的游戏信息。例如,游戏名称、ID、类型、开发商等元数据会被组织为键值对(如{"game_name":"Cyberpunk 2077","developer":"CD Projekt Red"}),便于后续处理。这种格式具有跨平台兼容性,可被多种编程语言解析,确保数据在不同系统间的流通性。
2.格式转换的中间桥梁Steam库本身依赖特定数据格式(如Steamworks API要求的结构),而原始提取的游戏信息可能不符合这一标准。SteamTools的JSON在此过程中充当“翻译器”:
输入阶段:用户或工具将游戏信息以自定义JSON格式保存,例如包含非标准字段(如"custom_tag":"RPG")或额外元数据。转换阶段:SteamTools读取JSON文件,通过内置逻辑将其映射为Steam库支持的格式(如删除冗余字段、调整数据类型或补充缺失信息)。输出阶段:转换后的数据可直接用于Steamworks API调用,实现批量导入或更新游戏库。3.支持批量操作与自动化JSON的文本特性使其易于通过脚本或工具批量处理。例如,用户可编写程序生成包含数百款游戏信息的JSON文件,再由SteamTools一次性导入Steam库,避免手动逐条添加的低效操作。这种自动化能力对游戏收藏管理、数据迁移或开发者测试库配置等场景尤为重要。
4.灵活性与扩展性JSON的开放结构允许用户自定义字段,满足个性化需求。例如,玩家可能添加"playtime_hours": 120或"completion_status":"Platinum"等非Steam原生字段,而SteamTools在转换时可选择保留或忽略这些信息,兼顾功能性与兼容性。
总结:SteamTools的JSON不仅是数据存储的载体,更是连接原始信息与Steam库生态的关键环节。它通过结构化存储、格式转换和批量处理能力,简化了游戏信息的管理流程,尤其适用于需要高效操作或定制化需求的场景。
android 怎么看json数据格式
给服务端发送请求后,服务端会返回一连串的数据,这些数据在大部分情况下都是XML格式或者JSON格式。然后JSON相对XML来说解析相对方便一些,所以先说说JSON的解析。
JSON的基本数据格式有这几种:
1.一个JSON对象——JSONObject
{"name":"胡小威","age":20,"male":true}
2.一个JSON数组——JSONArray
[{"name":"胡小威","age":20,"male":true},{"name":"赵小亮","age":22,"male":false}]
3.复杂一点的JSONObject
{"name":"胡小威","age"=20,"male":true,"address":{"street":"岳麓山南","city":"长沙","country":"中国"}}
4.复杂一点的JSONArray
[
{"name":"胡小威","age"=20,"male":true,"address":{"street":"岳麓山南","city":"长沙","country":"中国"}},
{"name":"赵小亮","age"=22,"male":false,"address":{"street":"九州港","city":"珠海","country":"中国"}}
]
5.来个更复杂的,这是我从爱帮公交上扒取的数据
{"buses":{"bus":[{"last_foot_dist":"0","time":"37","segments":{"segment":[{"line_name":"立珊专线(中南大学学生公寓-长沙火车站)","foot_dist":"362","stat_xys":"","stats":"岳麓山南;湖南师大;二里半;岳麓山北;市四医院;华图教育(太平街口);牛耳教育(南阳街口);韭菜园;曙光路口;长岛路口;长沙火车站","end_stat":"长沙火车站","line_xys":"","line_dist":"7535","start_stat":"岳麓山南"}]},"foot_dist":"362","dist":"7897"},{"last_foot_dist":"0","time":"41","segments":{"segment":[{"line_name":"旅1路(科教新村-长沙火车站)","foot_dist":"337","stat_xys":"","stats":"岳麓山南;湖南师大;二里半;岳麓山北;市四医院;华图教育(太平街口);蔡锷中路口;韭菜园;乔庄;曙光路口;长岛路口;五一东村;车站路口;长沙火车站","end_stat":"长沙火车站","line_xys":"","line_dist":"7822","start_stat":"岳麓山南"}]},"foot_dist":"337","dist":"8159"}]}}
接下来是解析部分
一、直接解析
1.{"name":"胡小威","age":20,"male":true}
Java代码
public void parseJsonObject(String json){
try{
JSONObject jsonObject= new JSONObject(json);
String name= jsonObject.getString("name");
int age= jsonObject.getInt("age");
boolean male= jsonObject.getBoolean("male");
//接下来该干嘛干嘛
} catch(JSONException e){
// TODO Auto-generated catch block
e.printStackTrace();
}
}
2.[{"name":"胡小威","age":20,"male":true},{"name":"赵小亮","age":22,"male":false}]
Java代码
public void parseJSONArray(String json){
try{
JSONArray jsonArray= new JSONArray(json);
for(int i= 0; i< jsonArray.length(); i++){
jsonObject= jsonArray.getJSONObject(i);
String name= jsonObject.getString("name");
int age= jsonObject.getInt("age");
boolean male= jsonObject.getBoolean("male");
//接下来该干嘛干嘛
}
} catch(JSONException e){
// TODO Auto-generated catch block
e.printStackTrace();
}
}
3.{"name":"胡小威","age"=20,"male":true,"address":{"street":"岳麓山南","city":"长沙","country":"中国"}}
Java代码
public void parseJsonPerson(String json){
try{
JSONObject jsonObject= new JSONObject(json);
String name= jsonObject.getString("name");
int age= jsonObject.getInt("age");
boolean male= jsonObject.getBoolean("male");
JSONObject addressJSON= jsonObject.getJSONObject("address");
String street= addressJSON.getString("street");
String city= addressJSON.getString("city");
String country= addressJSON.getString("country");
Address address= new Address(street, city, country);
Person person= new Person(name, age, male, address);
} catch(JSONException e){
// TODO Auto-generated catch block
e.printStackTrace();
}
}
4.
[
{"name":"胡小威","age"=20,"male":true,"address":{"street":"岳麓山南","city":"长沙","country":"中国"}},
{"name":"赵小亮","age"=22,"male":false,"address":{"street":"九州港","city":"珠海","country":"中国"}}
]
Java代码
public void parseJsonArrayPerson(String json){
List<Person> persons= new ArrayList<Person>();
try{
jsonArray= new JSONArray(json);
for(int i= 0; i< jsonArray.length(); i++){
jsonObject= jsonArray.getJSONObject(i);
String name= jsonObject.getString("name");
int age= jsonObject.getInt("age");
boolean male= jsonObject.getBoolean("male");
JSONObject addressJSON= jsonObject.getJSONObject("address");
String street= addressJSON.getString("street");
String city= addressJSON.getString("city");
String country= addressJSON.getString("country");
Address address= new Address(street, city, country);
Person person= new Person(name, age, male, address);
persons.add(person);
Log.v("juno", person.toString());
}
} catch(JSONException e){
// TODO Auto-generated catch block
e.printStackTrace();
}
Log.v("juno", persons.toString());
}
5.{"buses":{"bus":[{"last_foot_dist":"0","time":"37","segments":{"segment":[{"line_name":"立珊专线(中南大学学生公寓-长沙火车站)","foot_dist":"362","stat_xys":"","stats":"岳麓山南;湖南师大;二里半;岳麓山北;市四医院;华图教育(太平街口);牛耳教育(南阳街口);韭菜园;曙光路口;长岛路口;长沙火车站","end_stat":"长沙火车站","line_xys":"","line_dist":"7535","start_stat":"岳麓山南"}]},"foot_dist":"362","dist":"7897"},{"last_foot_dist":"0","time":"41","segments":{"segment":[{"line_name":"旅1路(科教新村-长沙火车站)","foot_dist":"337","stat_xys":"","stats":"岳麓山南;湖南师大;二里半;岳麓山北;市四医院;华图教育(太平街口);蔡锷中路口;韭菜园;乔庄;曙光路口;长岛路口;五一东村;车站路口;长沙火车站","end_stat":"长沙火车站","line_xys":"","line_dist":"7822","start_stat":"岳麓山南"}]},"foot_dist":"337","dist":"8159"}]}}
Java代码
public List<Salution> parseJSON(String str){
Log.d("返回的JSON数据:", str);
List<Salution> busList= new ArrayList<Salution>();
try{
JSONObject jsonObject= new JSONObject(str);
JSONObject busesJSON= jsonObject.getJSONObject("buses");
JSONArray busJSArray=busesJSON.getJSONArray("bus");
for(int i=0;i<busJSArray.length();i++){
JSONObject busJSObject= busJSArray.getJSONObject(i);
JSONObject segsJSObject=busJSObject.getJSONObject("segments");
JSONArray segJSArray=segsJSObject.getJSONArray("segment");
Salution st=new Salution();
for(int j=0;j<segJSArray.length();j++){
if(j==0){
JSONObject segJSObject= segJSArray.getJSONObject(j);
st.setLine_name1(segJSObject.getString("line_name"));
Log.d("line_name", segJSObject.getString("line_name"));
st.setStats1(segJSObject.getString("stats"));
st.setEnd_stat1(segJSObject.getString("end_stat"));
st.setStart_stat1(segJSObject.getString("start_stat"));
}
if(j==1){
JSONObject segJSObject= segJSArray.getJSONObject(j);
st.setLine_name2(segJSObject.getString("line_name"));
Log.d("line_name", segJSObject.getString("line_name"));
st.setStats2(segJSObject.getString("stats"));
st.setEnd_stat2(segJSObject.getString("end_stat"));
st.setStart_stat2(segJSObject.getString("start_stat"));
}
}
busList.add(st);
}
return busList;
} catch(JSONException e){
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
这里我只是简单获取了几个我想要的数据。
二、使用JSON类库Gson来解析JSON
Gson是 Google提供的用来在 Java对象和 JSON数据之间进行映射的 Java类库。可以将一个 JSON字符串转成一个 Java对象,或者反过来。
首先,从 code.google.com/p/google-gson/downloads/list下载GsonAPI
Java代码
google-gson-1.7.1-release.zip
再把gson-1.7.jar copy到libs
可以使用两种方法解析
①、通过获取JsonReader对象解析JSON数据:
Java代码
String jsonData="[{\"username\":\"arthinking\",\"userId\":001},{\"username\":\"Jason\",\"userId\":002}]";
try{
JsonReader reader= new JsonReader(new StringReader(jsonData));
reader.beginArray();
while(reader.hasNext()){
reader.beginObject();
while(reader.hasNext()){
String tagName= reader.nextName();
if(tagName.equals("username")){
System.out.println(reader.nextString());
}
else if(tagName.equals("userId")){
System.out.println(reader.nextString());
}
}
reader.endObject();
}
reader.endArray();
}
catch(Exception e){
e.printStackTrace();
}
②、通过把JSON数据映射成一个对象,使用Gson对象的fromJson()方法获取一个对象数组进行操作
Java代码
Type listType= new TypeToken<LinkedList<User>>(){}.getType();
Gson gson= new Gson();
LinkedList<User> users= gson.fromJson(jsonData, listType);
for(Iterator iterator= users.iterator(); iterator.hasNext();){
User user=(User) iterator.next();
System.out.println(user.getUsername());
System.out.println(user.getUserId());
}
我一般是采用直接解析,添加类库神马的最讨厌了···
还有,抱怨一下,iteye的编辑弱爆了!!!
转载
MongoDB 是什么 能干嘛
最近在回顾mongodb的相关知识,输出一篇文章做为MongoDB知识点的总结。
总结的目的在于回顾MongoDB的相关知识点,明确MongoDB在企业级应用中充当的角色,为之后的技术选型提供一个可查阅的信息简报。
MongoDB是一款为web应用程序和互联网基础设施设计的数据库管理系统。没错MongoDB就是数据库,是NoSQL类型的数据库
(1)MongoDB提出的是文档、集合的概念,使用BSON(类JSON)作为其数据模型结构,其结构是面向对象的而不是二维表,存储一个用户在MongoDB中是这样子的。
使用这样的数据模型,使得MongoDB能在生产环境中提供高读写的能力,吞吐量较于mysql等SQL数据库大大增强。
(2)易伸缩,自动故障转移。易伸缩指的是提供了分片能力,能对数据集进行分片,数据的存储压力分摊给多台服务器。自动故障转移是副本集的概念,MongoDB能检测主节点是否存活,当失活时能自动提升从节点为主节点,达到故障转移。
(3)数据模型因为是面向对象的,所以可以表示丰富的、有层级的数据结构,比如博客系统中能把“评论”直接怼到“文章“的文档中,而不必像myqsl一样创建三张表来描述这样的关系。
SQL类型的数据库是正规化的,可以通过主键或者外键的约束保证数据的完整性与唯一性,所以SQL类型的数据库常用于对数据完整性较高的系统。MongoDB在这一方面是不如SQL类型的数据库,且MongoDB没有固定的Schema,正因为MongoDB少了一些这样的约束条件,可以让数据的存储数据结构更灵活,存储速度更加快。
MongoDB保留了关系型数据库即时查询的能力,保留了索引(底层是基于B tree)的能力。这一点汲取了关系型数据库的优点,相比于同类型的NoSQL redis并没有上述的能力。
MongoDB自身提供了副本集能将数据分布在多台机器上实现冗余,目的是可以提供自动故障转移、扩展读能力。
MongoDB的驱动实现一个写入语义 fire and forget,即通过驱动调用写入时,可以立即得到返回得到成功的结果(即使是报错),这样让写入的速度更加快,当然会有一定的不安全性,完全依赖网络。
MongoDB提供了Journaling日志的概念,实际上像mysql的bin-log日志,当需要插入的时候会先往日志里面写入记录,再完成实际的数据操作,这样如果出现停电,进程突然中断的情况,可以保障数据不会错误,可以通过修复功能读取Journaling日志进行修复。
MongoDB使用分片技术对数据进行扩展,MongoDB能自动分片、自动转移分片里面的数据块,让每一个服务器里面存储的数据都是一样大小。
MongoDB核心服务器主要是通过mongod程序启动的,而且在启动时不需对MongoDB使用的内存进行配置,因为其设计哲学是内存管理最好是交给操作系统,缺少内存配置是MongoDB的设计亮点,另外,还可通过mongos路由服务器使用分片功能。
MongoDB的主要客户端是可以交互的js shell通过mongo启动,使用js shell能使用js直接与MongoDB进行交流,像使用sql语句查询mysql数据一样使用js语法查询MongoDB的数据,另外还提供了各种语言的驱动包,方便各种语言的接入。
mongodump和mongorestore,备份和恢复数据库的标准工具。输出BSON格式,迁移数据库。
mongoexport和mongoimport,用来导入导出JSON、CSV和TSV数据,数据需要支持多格式时有用。mongoimport还能用与大数据集的初始导入,但是在导入前顺便还要注意一下,为了能充分利用好mongoDB通常需要对数据模型做一些调整。
mongosniff,网络嗅探工具,用来观察发送到数据库的操作。基本就是把网络上传输的BSON转换为易于人们阅读的shell语句。
因此,可以总结得到,MongoDB结合键值存储和关系数据库的最好特性。因为简单,所以数据极快,而且相对容易伸缩还提供复杂查询机制的数据库。MongoDB需要跑在64位的服务器上面,且最好单独部署,因为是数据库,所以也需要对其进行热备、冷备处理。
因为本篇文章不是API手册,所有这里对shell的使用也是基础的介绍什么功能可以用什么语句,主要是为了展示使用MongoDB shell的方便性,如果需要知道具体的MongoDB shell语法可以查阅官方文档。
创建数据库并不是必须的操作,数据库与集合只有在第一次插入文档时才会被创建,与对数据的动态处理方式是一致的。简化并加速开发过程,而且有利于动态分配命名空间。如果担心数据库或集合被意外创建,可以开启严格模式
以上的命令只是简单实例,假设如果你之前没有学习过任何数据库语法,同时开始学sql查询语法和MongoDB查询语法,你会发现哪一个更简单呢?如果你使用的是java驱动去操作MongoDB,你会发现任何的查询都像Hibernate提供出来的查询方式一样,只要构建好一个查询条件对象,便能轻松查询(接下来会给出示例),博主之前熟悉ES6,所以入手MongoDB js shell完成没问题,也正因为这样简洁,完善的查询机制,深深的爱上了MongoDB。
这里引用的是最新的驱动包,提供了一套新的访问连接方式
这里只举例了简单的链接与简单的MongoDB操作,可见其操作的容易性。使用驱动时是基于TCP套接字与MongoDB进行通信的,如果查询结果较多,恰好无法全部放进第一服务器中,将会向服务器发送一个getmore指令获取下一批查询结果。
插入数据到服务器时间,不会等待服务器的响应,驱动会假设写入是成功的,实际是使用客户端生成对象id,但是该行为可以通过配置配置,可以通过安全模式开启,安全模式可以校验服务器端插入的错误。
关于json是用来干嘛的的内容到此结束,希望对大家有所帮助。