jsonobject
很多同学在进行编程学习时缺乏系统学习的资料。本页面基于jsonobject内容,从基础理论到综合实战,通过实用的知识类文章,标准的编程教程,丰富的视频课程,为您在jsonobject相关知识领域提供全面立体的资料补充。同时还包含 j2ee是什么、jar格式、java 的知识内容,欢迎查阅!
jsonobject相关知识
-
三级目录数据存取 */ //数据的存储解析 public ResData parClassVideo(String strJson,String uid) { ResData res = null; boolean result = false; try { res = parsResJson(strJson, ""); if (res.getStatus() == Constants.STATUS_SUCCESS) { db.deleteAll(ClassVideoInfo.class); db.deleteAll(ClassVideoInfoSecond.class); db.deleteAll(ClassVideoInfoThird.class); JSONObject jsonObject = new JSONObject(res.getData()); JSONArray jsonArray = jsonObject.getJS
-
JSONArray和JSONObject1, JSONObjectjson对象,就是一个键对应一个值,使用的是大括号{},即:{key:value}2,JSONArrayjson数组,是用中括号[],数组里面的项也是json键值对格式
-
java web api json 数据解析1、jar 包 JSONObject 类需要导入两个json 包 1.1、json-20160810.jar 1.2、commons-io-2.4.jar File file = new File("C:" + File.separator + "curtis" + File.separator + "java" + File.separator + "demo" + File.separator + "JavaSE-01" + File.separator + "src" + File.separator + "weather.json"); String content = FileUtils.readFileToString(file); JSONObject obj = new JSONObject(content); // System.out.println(obj); JSON
-
java处理json数据基本的JSONArray与JSONObject操作:JSONObject jsonObj =new JSONObject(); jsonObj.put("name0", "zhangsan"); jsonObj.put("sex1", "female"); System.out.println(jsonObj); //输出为:{"sex1":"female","name0":"zhangsan"} JSONArray jsonArray =new JSONArray(); jsonArray.add("11"); jsonArray.add("22"); jsonArray.
jsonobject相关课程
jsonobject相关教程
- 3.1 JsonObject 处理器 JSON 可分为 object 和 array 两大类,分别对应 info 和 tags 字段,这两类需要分别实现类型处理器。由于需要对 JSON 进行处理,我们在 pom.xml 文件中添加上对应的依赖。<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.60</version></dependency>这里,我们使用阿里巴巴开源的 fastjson库。在 com.imooc.mybatis 包下新建 handler 包,并向 handler 包中添加上 json object 的类型处理器 JsonObjectTypeHandler。如下:package com.imooc.mybatis.handler;import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.JSONObject;import org.apache.ibatis.type.*;import java.sql.CallableStatement;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;@MappedJdbcTypes(JdbcType.VARCHAR) // 对应jdbc 类型@MappedTypes({JSONObject.class}) // 对应处理后类型public class JsonObjectTypeHandler extends BaseTypeHandler<JSONObject> { // 当为 PreparedStatement 参数时,如何处理对象 @Override public void setNonNullParameter(PreparedStatement preparedStatement, int i, JSONObject o, JdbcType jdbcType) throws SQLException { preparedStatement.setString(i, JSON.toJSONString(o)); } // 当通过名称从结果中取json字段时如何处理 @Override public JSONObject getNullableResult(ResultSet resultSet, String s) throws SQLException { String t = resultSet.getString(s); return JSON.parseObject(t); } // 当通过序列号从结果中取json字段时如何处理 @Override public JSONObject getNullableResult(ResultSet resultSet, int i) throws SQLException { String t = resultSet.getString(i); return JSON.parseObject(t); } // 当通过序列号从 CallableStatement 中取json字段时如何处理 @Override public JSONObject getNullableResult(CallableStatement callableStatement, int i) throws SQLException { String t = callableStatement.getString(i); return JSON.parseObject(t); }}有了 BaseTypeHandler 作为基础后,实现一个类型处理器就比较简单了,我们只需要为其中 4 个方法添加上对应的实现即可。类型处理器有两个作用,第一处理 Java 对象到 JdbcType 类型的转换,对应 setNonNullParameter 方法;第二处理 JdbcType 类型到 Java 类型的转换,对应 getNullableResult 方法,getNullableResult 有 3 个重载方法。下面我们依次来说明这四个方法的作用:setNonNullParameter:处理 PreparedStatement 中的 JSONObject 参数,当调用 PreparedStatement 执行 SQL 语句时,调用该处理 JSONObject 类型的参数,这里我们通过 fastjson 的JSON.toJSONString(o)函数将 JSONObject 转化为字符串类型即可。getNullableResult:从结果集中获取字段,这里 CallableStatement 和 ResultSet 分别对应不同的执行方式,对于 JDBC 而言 JSON 类型也会当做字符串来处理,因此这里我们需要将字符串类型转化为 JSONObject 类型,对应 JSON.parseObject(t)代码。
- 3. Json 解析示例 本节我们来用 Android 原生的 Json 工具对 1.2 小节中的“工程师”数据进行一个解析,主需要用到必考的两个类:JSONArray和JSONObject。
- 2.2 Zookeeper 管理数据源配置 首先我们需要使用 Curator 客户端来连接 Zookeeper 服务端,并且在 Spring IOC 容器中拿到 dataSource,保存它的信息到节点的 data 中,然后对该节点开启监听,监听到节点更新事件后,获取节点新的信息,并更新数据源。在 curator 目录中新建 CuratorService 类:package cn.cdd.zookeeper.config.curator;import com.alibaba.druid.pool.DruidDataSource;import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.JSONObject;import org.apache.curator.framework.CuratorFramework;import org.apache.curator.framework.CuratorFrameworkFactory;import org.apache.curator.framework.recipes.cache.*;import org.apache.curator.retry.RetryForever;import org.apache.zookeeper.data.Stat;import org.springframework.context.ConfigurableApplicationContext;import java.nio.charset.StandardCharsets;import java.sql.SQLException;public class CuratorService { private ConfigurableApplicationContext applicationContext; public CuratorService(ConfigurableApplicationContext applicationContext) { this.applicationContext = applicationContext; } private static final String DATASOURCE_NODE = "/imooc/datasource"; /** * 构建 CuratorFramework 客户端,并开启会话 * * @return CuratorFramework */ public CuratorFramework buildCuratorClient() { // 使用 CuratorFrameworkFactory 构建 CuratorFramework CuratorFramework client = CuratorFrameworkFactory.builder() // Zookeeper 地址 .connectString("127.0.0.1:2181") // 重连策略 .retryPolicy(new RetryForever(10000)) .build(); // 开启会话 client.start(); return client; } /** * 保存数据源信息到 Zookeeper * * @param client CuratorFramework * @throws Exception Exception */ public void saveDataSource(CuratorFramework client) throws Exception { // 在 Spring IOC 容器中获取 dataSource DruidDataSource dataSource = (DruidDataSource) applicationContext.getBean("dataSource"); JSONObject jsonObject = new JSONObject(); jsonObject.put("DriverClassName", dataSource.getDriverClassName()); jsonObject.put("Url", dataSource.getUrl()); jsonObject.put("Username", dataSource.getUsername()); jsonObject.put("Password", dataSource.getPassword()); // 检查 Zookeeper 服务端是否存在 DATASOURCE_NODE 节点 Stat stat = client.checkExists().forPath(DATASOURCE_NODE); // 不存在则创建,并保存信息 if (stat == null) { client.create().creatingParentsIfNeeded().forPath(DATASOURCE_NODE, jsonObject.toJSONString().getBytes()); } else { // 存在则修改信息 client.setData().forPath(DATASOURCE_NODE, jsonObject.toJSONString().getBytes()); } } /** * 开启监听 * * @param client CuratorFramework */ public void startMonitoring(CuratorFramework client) { // 构建 CuratorCache 实例 CuratorCache cache = CuratorCache.build(client, DATASOURCE_NODE); // 使用 Fluent 风格和 lambda 表达式来构建 CuratorCacheListener 的事件监听 CuratorCacheListener listener = CuratorCacheListener.builder() // 开启对节点更新事件的监听 .forChanges((oldNode, newNode) -> { // 从新节点获取数据 byte[] data = newNode.getData(); String config = new String(data, StandardCharsets.UTF_8); if (!config.isEmpty()) { JSONObject jsonObject = JSON.parseObject(config); try { loadDataSource(jsonObject); } catch (SQLException e) { e.printStackTrace(); } System.err.println(">>> 从配置中心更新数据源: " + config); } }) // 初始化 .forInitialized(() -> System.out.println(">>> CuratorCacheListener 初始化")) // 构建 .build(); // 注册 CuratorCacheListener 到 CuratorCache cache.listenable().addListener(listener); // CuratorCache 开启缓存 cache.start(); } /** * 加载数据源 * * @param jsonObject 配置信息 * @throws SQLException SQLException */ private void loadDataSource(JSONObject jsonObject) throws SQLException { // 在 Spring IOC 容器中获取 dataSource DruidDataSource dataSource = (DruidDataSource) applicationContext.getBean("dataSource"); // 已经初始化的数据源需要重新启动 if (dataSource.isInited()) { dataSource.restart(); } // 更新数据源配置 dataSource.setDriverClassName(jsonObject.getString("DriverClassName")); dataSource.setUrl(jsonObject.getString("Url")); dataSource.setUsername(jsonObject.getString("Username")); dataSource.setPassword(jsonObject.getString("Password")); // 数据源初始化 dataSource.init(); }}完成 CuratorService 类后,我们还需要 ConfigurableApplicationContext 来获取 IOC 容器中的 dataSource,我们可以在主类 ZookeeperConfigApplication 中获取:package cn.cdd.zookeeper.config;import cn.cdd.zookeeper.config.curator.CuratorService;import org.apache.curator.framework.CuratorFramework;import org.mybatis.spring.annotation.MapperScan;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.context.ConfigurableApplicationContext;@SpringBootApplication@MapperScan(basePackages = "cn.cdd.zookeeper.config.dao")public class ZookeeperConfigApplication { public static void main(String[] args) { ConfigurableApplicationContext applicationContext = SpringApplication.run(ZookeeperConfigApplication.class, args); try { // 使用 applicationContext 初始化 CuratorService CuratorService curatorService = new CuratorService(applicationContext); // 获取 Curator 客户端 CuratorFramework client = curatorService.buildCuratorClient(); // 保存数据源信息 curatorService.saveDataSource(client); // 开启监听 curatorService.startMonitoring(client); } catch (Exception e) { e.printStackTrace(); } }}接下来我们就可以开启 Zookeeper ,来对数据源的变化进行测试了。
- 3.2 解析逻辑 在实际开发中,解析逻辑通常可以单独提出一个类似 Utils 的工具类,这样可以提供给各方使用。本节放在 MainActivity 中完成,获取 Button 后在onClick()方法中调用parse()方法进行 Json 数据解析。最后将解析结果放到 TextView 上展示:package com.emercy.myapplication;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.widget.TextView;import org.json.JSONArray;import org.json.JSONObject;public class MainActivity extends Activity { public static final String JSON_STRING = "{\"Engineers\":[{\"skill\":\"Android\",\"language\":\"Java\",\"years\":\"5\"},{\"skill\":\"iOS\",\"language\":\"Object C\",\"years\":\"2\"},{\"skill\":\"Server\",\"language\":\"php\",\"years\":\"8\"}]}"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); findViewById(R.id.parse).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { parse(JSON_STRING); } }); } private void parse(String jsonStr) { TextView textView = (TextView) findViewById(R.id.json); try { JSONObject engineers = new JSONObject(jsonStr); JSONArray array = engineers.getJSONArray("Engineers"); StringBuilder stringBuilder = new StringBuilder(); for (int i = 0; i < array.length(); i++) { JSONObject engineer = array.getJSONObject(i); String skill = engineer.getString("skill"); String language = engineer.getString("language"); int years = engineer.getInt("years"); stringBuilder.append("Engineer ").append(i) .append(": skill is ").append(skill) .append("; language is ").append(language) .append("; years is ").append(years).append("\n"); } textView.setText(stringBuilder.toString()); } catch (Exception e) { e.printStackTrace(); } }}核心解析逻辑都在parse()方法中,拿到 Json String 之后,首先从中去除“工程师”数组,然后遍历数组一次解析“skill”、“language”、“years”字段,挨个生成好“工程师”对象,然后拼接成结果文本展示到 TextView 上。编译后点击解析,结果如下:
- 4.2 局部注册 由于全局注册会对其它类型产生歧义和污染,因此我们选择更加精准的局部注册。在 BlogMapper 中,我们来注册和使用类型处理器。在 BlogMapper.xml 文件中,我们添加上如下配置。<resultMap id="blogMap" type="com.imooc.mybatis.model.Blog"> <result column="id" property="id"/> <result column="info" property="info" typeHandler="com.imooc.mybatis.handler.JsonObjectTypeHandler"/> <result column="tags" property="tags" typeHandler="com.imooc.mybatis.handler.JsonArrayTypeHandler"/></resultMap><select id="selectById" resultMap="blogMap"> SELECT * FROM blog WHERE id = #{id}</select>我们定义了 名为 blogMap 的 resultMap 和名为 selectById 的查询。在 result 映射中,我们注册了相关的类型处理器,info 字段对应JsonObjectTypeHandler 类型处理器,tags 字段对应 JsonArrayTypeHandler 类型处理器。这样自定义的类型处理器不会污染到其它数据,blogMap 的类型 com.imooc.mybatis.model.Blog 定义如下:package com.imooc.mybatis.model;import com.alibaba.fastjson.JSONArray;import com.alibaba.fastjson.JSONObject;public class Blog { private Long id; private JSONObject info; private JSONArray tags; // 省略了 getter 和 setter 方法}4.3 处理 JDBC 类型在对应的 BlogMapper.java 接口上添加上对应的 selectById 方法:package com.imooc.mybatis.mapper;import com.imooc.mybatis.model.Blog;import org.apache.ibatis.annotations.Mapper;@Mapperpublic interface BlogMapper { Blog selectById(Integer id);}我们测试一下 selectById 方法:BlogMapper blogMapper = session.getMapper(BlogMapper.class);Blog blog = blogMapper.selectById(1);System.out.println(blog.toString());String title = blog.getInfo().getString("title");System.out.println(title);String tag = blog.getTags().getString(0);System.out.println(tag);输出结果如下:Blog{id=1, info={"rank":1,"title":"世界更大","content":".......****............"}, tags=["世界观"]}世界更大世界观从结果中可以看出,类型处理器成功的处理了查询的数据,info 和 tags 字段都能够通过 fastjson 的 API 来获取里面的内容。4.4 处理 JSON 类型在查询可以工作的情况下,那么如何通过 insert 插入 JSON 对象了。我们在 BlogMapper 中新增一个 insertBlog 方法,如下:<insert id="insertBlog"> INSERT INTO blog(info,tags) VALUES(#{info,typeHandler=com.imooc.mybatis.handler.JsonObjectTypeHandler}, #{tags,typeHandler=com.imooc.mybatis.handler.JsonArrayTypeHandler})</insert>public interface BlogMapper { int insertBlog(@Param("info") JSONObject info, @Param("tags") JSONArray tags);}这样 MyBatis 就可以处理 JSON 类型的参数了,我们再次测试一下:JSONObject info = new JSONObject().fluentPut("title", "测试案例").fluentPut("rank", 1);JSONArray tags = new JSONArray().fluentAdd("测试");int rows = blogMapper.insertBlog(info, tags);System.out.println(rows);输出结果:1可以看到类型处理器成为了 Java JSON 类型和 JDBC 类型转换桥梁,在查询的时候主动将数据库类型转化为了可用的 JSON 类型,而在插入的时候将 JSON 类型又转化为了数据库可识别的字符串类型。
- 2. Json 库的使用 Android 内部为我们提供了 Json 的解析接口,以下是接口中常用的类:JSONObject:(必考)对应一个 Json 对象,相当于上面例子中的“工程师”JSONArray:(必考)对应一个 Json 对象数组,相当于上面例子中的“工程师”数组JSONStringer:Json 文本辅助工具,可以帮助我们快速创建一个 Json StringJSONTokener:Json 特殊字符解析类JSONException:**Json 异常其中前两个打上“必考”标识的是重中之重,关于 Json 处理的 90% 问题都需要这两个类的帮忙,后面我们会看到这两个接口的具体用法。
jsonobject相关搜索
-
j2ee
j2ee是什么
jar格式
java
java api
java applet
java c
java jdk
java list
java map
java script
java se
java socket
java swing
java switch
java web
java xml
java 程序设计
java 多线程
java 环境变量