gpt4 book ai didi

Simple JSON开发指南

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 25 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章Simple JSON开发指南由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

Simple JSON是Google开发的Java JSON解析框架,基于Apache协议.

下载的文件是:json_simple.jar 。

例子1:很方便的方式,使用JSONValue 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
System.out.println( "=======decode=======" );
   
    String s= "[0,{\"1\":{\"2\":{\"3\":{\"4\":[5,{\"6\":7}]}}}}]" ;
    Object obj=JSONValue.parse(s);
    JSONArray array=(JSONArray)obj;
    System.out.println( "======the 2nd element of array======" );
    System.out.println(array.get( 1 ));
    System.out.println();
       
    JSONObject obj2=(JSONObject)array.get( 1 );
    System.out.println( "======field \"1\"==========" );
    System.out.println(obj2.get( "1" )); 
 
       
    s= "{}" ;
    obj=JSONValue.parse(s);
    System.out.println(obj);
       
    s= "[5,]" ;
    obj=JSONValue.parse(s);
    System.out.println(obj);
       
    s= "[5,,2]" ;
    obj=JSONValue.parse(s);
    System.out.println(obj);

JSONObject是继承Map的,而JSONArray是继承List的,所以你可以用Map和List的标准方式来使用JSONObject和JSONArray.

而JSONValue则可以使用数组也可以用对象.

例子2:快速的方式,使用JSONParser 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
JSONParser parser= new JSONParser();
 
  System.out.println( "=======decode=======" );
     
  String s= "[0,{\"1\":{\"2\":{\"3\":{\"4\":[5,{\"6\":7}]}}}}]" ;
  Object obj=parser.parse(s);
  JSONArray array=(JSONArray)obj;
  System.out.println( "======the 2nd element of array======" );
  System.out.println(array.get( 1 ));
  System.out.println();
     
  JSONObject obj2=(JSONObject)array.get( 1 );
  System.out.println( "======field \"1\"==========" );
  System.out.println(obj2.get( "1" )); 
 
     
  s= "{}" ;
  obj=parser.parse(s);
  System.out.println(obj);
     
  s= "[5,]" ;
  obj=parser.parse(s);
  System.out.println(obj);
     
  s= "[5,,2]" ;
  obj=parser.parse(s);
  System.out.println(obj);

 使用JSONParser需要捕获异常.

例子3:异常处理 。

?
1
2
3
4
5
6
7
8
9
10
String jsonText = "[[null, 123.45, \"a\\tb c\"]}, true" ;
  JSONParser parser = new JSONParser();
     
  try {
  parser.parse(jsonText);
  }
  catch (ParseException pe){
  System.out.println( "position: " + pe.getPosition());
  System.out.println(pe);
  }

执行结果:

?
1
position: 25 Unexpected token RIGHT BRACE(}) at position 25 .

  。

例子4:容器工厂 。

使用使用ContainerFactory类来创建一个容器工厂.

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
String jsonText = "{\"first\": 123, \"second\": [4, 5, 6], \"third\": 789}" ;
  JSONParser parser = new JSONParser();
  ContainerFactory containerFactory = new ContainerFactory(){
  public List creatArrayContainer() {
   return new LinkedList();
  }
 
  public Map createObjectContainer() {
   return new LinkedHashMap();
  }
       
  };
     
  try {
  Map json = (Map)parser.parse(jsonText, containerFactory);
  Iterator iter = json.entrySet().iterator();
  System.out.println( "==iterate result==" );
  while (iter.hasNext()){
   Map.Entry entry = (Map.Entry)iter.next();
   System.out.println(entry.getKey() + "=>" + entry.getValue());
  }
       
  System.out.println( "==toJSONString()==" );
  System.out.println(JSONValue.toJSONString(json));
  }
  catch (ParseException pe){
  System.out.println(pe);
  }

 结果如下:

?
1
2
==iterate result== first=> 123 second=>[ 4 , 5 , 6 ] third=> 789 ==toJSONString()==
  { "first" : 123 , "second" :[ 4 , 5 , 6 ], "third" : 789 }
 如果你不使用容器工厂,Simple-JSON默认使用JSONObject和JSONArray。
 例子5:可停的SAX式内容处理
SimpleJSON推荐一种简单的可停的SAX方式的内容处理方式来处理文本流,用户可以停留在逻辑输入流的任意点,接着去处理其他逻辑,然后再继续先前的处理。不用等待整个流处理完毕。以下是一个例子。
KeyFinder.java:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
class KeyFinder implements ContentHandler{
  private Object value;
  private boolean found = false ;
  private boolean end = false ;
  private String key;
  private String matchKey;
   
  public void setMatchKey(String matchKey){
  this .matchKey = matchKey;
  }
   
  public Object getValue(){
  return value;
  }
   
  public boolean isEnd(){
  return end;
  }
   
  public void setFound( boolean found){
  this .found = found;
  }
   
  public boolean isFound(){
  return found;
  }
   
  public void startJSON() throws ParseException, IOException {
  found = false ;
  end = false ;
  }
 
  public void endJSON() throws ParseException, IOException {
  end = true ;
  }
 
  public boolean primitive(Object value) throws ParseException, IOException {
  if (key != null ){
   if (key.equals(matchKey)){
   found = true ;
   this .value = value;
   key = null ;
   return false ;
   }
  }
  return true ;
  }
 
  public boolean startArray() throws ParseException, IOException {
  return true ;
  }
 
   
  public boolean startObject() throws ParseException, IOException {
  return true ;
  }
 
  public boolean startObjectEntry(String key) throws ParseException, IOException {
  this .key = key;
  return true ;
  }
   
  public boolean endArray() throws ParseException, IOException {
  return false ;
  }
 
  public boolean endObject() throws ParseException, IOException {
  return true ;
  }
 
  public boolean endObjectEntry() throws ParseException, IOException {
  return true ;
  }
}
Main logic:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
String jsonText = "{\"first\": 123, \"second\": [{\"k1\":{\"id\":\"id1\"}}, 4, 5, 6, {\"id\": 123}], \"third\": 789, \"id\": null}" ;
  JSONParser parser =newJSONParser();
  KeyFinder finder =newKeyFinder();
  finder.setMatchKey( "id" );
  try {
  while (!finder.isEnd()){
   parser.parse(jsonText, finder, true );
   if (finder.isFound()){
   finder.setFound( false );
   System.out.println( "found id:" );
   System.out.println(finder.getValue());
   }
  }  
  }
  catch (ParseException pe){
  pe.printStackTrace();
  }
执行结果:
?
1
2
3
4
5
6
found id:
  id1
  found id:
  123
  found id:
  null
例子6:整个对象图,用SAX式的解析
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
class Transformer implements ContentHandler{
   private Stack valueStack;
   
   public Object getResult(){
    if (valueStack == null || valueStack.size() == 0 )
     return null ;
    return valueStack.peek();
   }
   
   public boolean endArray () throws ParseException, IOException {
    trackBack();
    return true ;
   }
 
   public void endJSON () throws ParseException, IOException {}
 
   public boolean endObject () throws ParseException, IOException {
    trackBack();
    return true ;
   }
 
   public boolean endObjectEntry () throws ParseException, IOException {
    Object value = valueStack.pop();
    Object key = valueStack.pop();
    Map parent = (Map)valueStack.peek();
    parent.put(key, value);
    return true ;
   }
 
   private void trackBack(){
    if (valueStack.size() > 1 ){
     Object value = valueStack.pop();
     Object prev = valueStack.peek();
     if (prev instanceof String){
      valueStack.push(value);
     }
    }
   }
   
   private void consumeValue(Object value){
    if (valueStack.size() == 0 )
     valueStack.push(value);
    else {
     Object prev = valueStack.peek();
     if (prev instanceof List){
      List array = (List)prev;
      array.add(value);
     }
     else {
      valueStack.push(value);
     }
    }
   }
   
   public boolean primitive (Object value) throws ParseException, IOException {
    consumeValue(value);
    return true ;
   }
 
   public boolean startArray () throws ParseException, IOException {
    List array = new JSONArray();
    consumeValue(array);
    valueStack.push(array);
    return true ;
   }
 
   public void startJSON () throws ParseException, IOException {
    valueStack = new Stack();
   }
 
   public boolean startObject () throws ParseException, IOException {
    Map object = new JSONObject();
    consumeValue(object);
    valueStack.push(object);
    return true ;
   }
 
   public boolean startObjectEntry (String key) throws ParseException, IOException {
    valueStack.push(key);
    return true ;
   }
   
  }

Main方式逻辑:

?
1
2
3
4
5
6
7
String jsonString = <Input JSON text>;
  Object value = null ;
  JSONParser parser = new JSONParser();
  Transformer transformer = new Transformer();
   
  parser.parse(jsonString, transformer);
  value = transformer.getResult();
 执行结果:
?
1
2
3
4
String jsonString =<Input JSON text>;
  Object value = null ;
  JSONParser parser =newJSONParser();
  value = parser.parse(jsonString);
注意:
JSONPauser不是线程安全的。 

json_encode — 对变量进行 JSON 编码.

说明:string json_encode ($value ),返回 value 值的 JSON 形式.

参数:待编码的 value ,除了resource 类型之外,可以为任何数据类型 。

该函数只能接受 UTF-8 编码的数据(译注:指字符/字符串类型的数据) 。

返回值:编码成功则返回一个以 JSON 形式表示的 string .

最后此篇关于Simple JSON开发指南的文章就讲到这里了,如果你想了解更多关于Simple JSON开发指南的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com