`
zhangbaocheng
  • 浏览: 34541 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

使用JSON与jsChart时出现的问题

阅读更多

当我们想从服务器获取数据,并根据所得数据在网页上制成图时,大多数情况下要求服务器传递给页面的是一组数据,而非单个数据,我们需要将一个List转化为JSON字符串从服务器端传递至客户端。JSON字符串的语法格式为:[{key1:value1,key2:value2, ... ...},{},{}... ...]

 

而在客户端,在使用jsChart根据数据生成图片时,所需数据格式为:(['Jan', 2], ['Feb', 1], ... ...)。

 

很明显如果直接将JSON字符串evalJSON后直接myChart.setDataArray()的话肯定无效。这就需要我们将JSON字符串转换为目标格式。思路是:将jsChart复制所需的数组设计成二维数组, 用二维数组的每一项代表一个数据对象。 参考代码如下:

 

实体类entity.People

package entity;

public class People {
 private String name;
 private double salary;
 
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public double getSalary() {
  return salary;
 }
 public void setSalary(double salary) {
  this.salary = salary;
 }
}


 

 

 

 

用于处理请求的Servlet:Test(访问url为test)

package test;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import util.JSONUtils;

import entity.People;

public class Test extends HttpServlet {
 public void service(HttpServletRequest request, 
   HttpServletResponse response)
   throws ServletException, IOException {
  PrintWriter out = response.getWriter();
  List<People> list=new ArrayList<People>();
  for(int i=0;i<10;i++){
   People people=new People();
   people.setName("A"+i);
   people.setSalary(new Random().nextDouble());
   list.add(people);
  }
  out.println(JSONUtils.listToString(list));
  out.flush();
  out.close();
 }

}

 

 

 

 

JSON工具类:

package util;

import java.util.List;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

public class JSONUtils {
 public static String listToString(List list){
  JSONArray json=JSONArray.fromObject(list);
  String str=json.toString();
  return str;
 }
 public static String objectArrayToString(Object[] obj){
  JSONArray json=JSONArray.fromObject(obj);
  return json.toString();
 }
 public static String objectToString(Object obj){
  JSONObject json=JSONObject.fromObject(obj);
  return json.toString();
 }
}

 

 

 

 

web.xml配置文件

 <servlet>
    <description>This is the description of my J2EE component</description>
    <display-name>This is the display name of my J2EE component</display-name>
    <servlet-name>Test</servlet-name>
    <servlet-class>test.Test</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>Test</servlet-name>
    <url-pattern>/test</url-pattern>
  </servlet-mapping>

  

 

 

 

JSP文件

<%@ page language="java" contentType="text/html; charset=utf-8"
 pageEncoding="utf-8"%>
<html>
 <head>
  <title></title>
  <meta http-equiv="content-type" content="text/html;charset=utf-8"/>
  <script type="text/javascript" src="js/prototype1.6.js"></script>
  <script type="text/javascript" src="js/jscharts.js"></script>
 </head>
 <body>
  <a href="index.jsp">返回</a>
  <br />
  <div id="div">加载...</div>
  <script type="text/javascript">
   function getXmlHttpRequest(){
        var xmlHttpRequest = null;
        if ((typeof XMLHttpRequest) != 'undefined'){
         xmlHttpRequest = new XMLHttpRequest();
        }else {
         xmlHttpRequest = new ActiveXObject('Microsoft.XMLHttp');
        }
        return xmlHttpRequest;
   }   
   function getData(){
       xmlReq=getXmlHttpRequest();
       var url="test";
       xmlReq.open("GET",encodeURI(url),true);
       xmlReq.onreadystatechange=function(){
     if(xmlReq.readyState == 4){
      /*注意JSON字符串[{key:value,key1:value1...},{},{}...]
      *转换为JS对象,进而
      *转化为符合jsChart条件([key,value],[key1,value1]...)
      *的数组的过程
      */
      var resText = xmlReq.responseText;
      var temp=resText.evalJSON();
      var array=new Array();
      for(var i=0;i<temp.length;i++){
       var arr=new Array();
       arr[0]=temp[i].name;
       arr[1]=temp[i].salary;
       array[i]=arr;
      }
      var myChart = new JSChart('div', 'line');
      myChart.setDataArray(array);
      myChart.draw();
     }
    }
       xmlReq.send(null);
   }
   window.onload=getData;
  </script>
 </body>
</html>



 

 

 

 

 

分享到:
评论
2 楼 hzxlb910 2013-06-22  
加关注,期告待更多
1 楼 hzxlb910 2013-06-22  
虽然就一篇,但写的还不错哈

相关推荐

    JsChart 3 去水印版

    6. **示例与文档**:"包含使用Example"说明压缩包内提供了示例代码,这有助于快速了解如何使用JsChart 3 创建和配置图表。示例代码通常会涵盖基本用法和复杂功能,对于初学者来说非常有价值。同时,建议参考官方文档...

    JsChart组件使用详解

    1. **数据源支持多种格式**:除了JavaScript数组,JsChart还支持使用JSON和XML格式的数据作为数据源,通过`setDataJSON`和`setDataXML`方法来分别使用JSON或XML格式数据。 2. **图表类型的多样性**:JsChart支持...

    jsChart 是一套简单、易于集成到你的网站的生动、交互的图表。

    2. **准备数据**:将要展示的数据整理成JSON格式或其他适合JSChart解析的格式。 3. **创建容器**:在HTML中创建一个用于放置图表的div元素,设置其ID以便于JavaScript代码操作。 4. **初始化图表**:通过...

    SSH框架网上商城项目第29战之使用JsChart技术显示商品销售报表

    4. **前端渲染**:在JSP页面中解析JSON数据,并使用JsChart的API将数据渲染到页面中,形成图表。 ### 完成和总结 作者提到,这个网上商城项目即将完成,除了本节所讲的销售报表外,还计划抽取DAO层,完善整个项目...

    java web中调用后台方法用js快速生成图表

    本文将探讨如何利用JavaScript库JSChart与Java后端DWR(Direct Web Remoting)技术来快速生成图表,以实现前后端的有效交互。 首先,DWR是一种在浏览器和Java服务器之间进行异步通信的技术,它允许我们在不使用...

    js charts含中文demo

    然而,原版的JSCharts在处理中文字符时可能存在兼容性问题,导致中文显示不正常或者乱码。在提供的"js charts含中文demo"中,我们可能找到了解决这一问题的方案。 首先,我们需要了解JSCharts的基本用法。JSCharts...

    JS各种图表

    - **方法一(JSON数据)**:例如,可以定义一个名为`myData`的数组,然后创建一个新的JSChart对象,设置数据并绘制图表,如下所示: ```javascript var myData = new Array([10, 20], [15, 10], [20, 30], [25, ...

    jscharts.js

    它支持多种数据输入格式(如XML、JSON或JavaScript数组),使得用户可以轻松地将数据转换为图表。此库允许开发者绘制各种类型的图表,包括条形图、饼图和线图等,并且高度可定制。 #### 二、实现步骤 ##### 1. ...

    JS Charts 3

    2. **准备数据**:将要展示的数据以JSON或其他格式组织好,可以是静态数据,也可以是从服务器获取的动态数据。 3. **创建图表容器**:在HTML中创建一个`div`元素作为图表的容器,并设置相应的ID。 4. **初始化图表...

    jQuery统计图

    其次,jsCharts是一款基于JavaScript的图表绘制工具,它可以无缝地与jQuery整合。jsCharts提供了一种简单的方式来创建动态、交互式的图表,包括柱形图、线形图等多种图表类型。这个插件的核心优点在于它允许开发者...

    JS Charts 最新完整版

    JS Charts可以很好地与jQuery、AngularJS、React等前端框架配合使用,增强应用程序的功能和用户体验。 7. **学习与进阶** - 通过阅读JSCharts.pdf,可以深入理解库的内部机制和最佳实践。 - 分析examples中的...

Global site tag (gtag.js) - Google Analytics