merge all into single repo
This commit is contained in:
@@ -0,0 +1 @@
|
||||
description = 'GumTree tree generator for JSON code (AntLR based).'
|
||||
@@ -0,0 +1,112 @@
|
||||
grammar JSON;
|
||||
|
||||
options {
|
||||
output = AST;
|
||||
}
|
||||
|
||||
tokens {
|
||||
STRING; NUMBER; OBJECT; FIELD; ARRAY;
|
||||
COMMA = ',';
|
||||
TRUE; FALSE; NULL;
|
||||
}
|
||||
|
||||
@header {
|
||||
package com.github.gumtreediff.gen.antlr3.json;
|
||||
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
}
|
||||
|
||||
@lexer::header {
|
||||
package com.github.gumtreediff.gen.antlr3.json;
|
||||
}
|
||||
|
||||
// Optional step: Disable automatic error recovery
|
||||
@members {
|
||||
protected void mismatch(IntStream input, int ttype, BitSet follow)
|
||||
throws RecognitionException
|
||||
{
|
||||
throw new MismatchedTokenException(ttype, input);
|
||||
}
|
||||
public Object recoverFromMismatchedSet(IntStream input,
|
||||
RecognitionException e,
|
||||
BitSet follow)
|
||||
throws RecognitionException
|
||||
{
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
// Alter code generation so catch-clauses get replace with
|
||||
// this action.
|
||||
@rulecatch {
|
||||
catch (RecognitionException e) {
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
value
|
||||
: string
|
||||
| number
|
||||
| object
|
||||
| array
|
||||
| 'true' -> TRUE
|
||||
| 'false' -> FALSE
|
||||
| 'null' -> NULL
|
||||
;
|
||||
|
||||
string : String
|
||||
-> ^(STRING String)
|
||||
;
|
||||
|
||||
// If you want to conform to the RFC, use a validating semantic predicate to check the result.
|
||||
number : n=Number {Pattern.matches("(0|(-?[1-9]\\d*))(\\.\\d+)?", n.getText())}?
|
||||
Exponent?
|
||||
-> ^(NUMBER Number Exponent?)
|
||||
;
|
||||
|
||||
object : '{' members? '}'
|
||||
-> ^(OBJECT members?)
|
||||
;
|
||||
|
||||
array : '[' elements? ']'
|
||||
-> ^(ARRAY elements?)
|
||||
;
|
||||
|
||||
elements: value (COMMA! value)*
|
||||
;
|
||||
|
||||
members : pair (COMMA! pair)*
|
||||
;
|
||||
|
||||
pair : String ':' value
|
||||
-> ^(FIELD String value)
|
||||
;
|
||||
|
||||
Number : '-'? Digit+ ( '.' Digit+)?;
|
||||
|
||||
Exponent: ('e'|'E') '-'? ('1'..'9') Digit*;
|
||||
|
||||
String :
|
||||
'"' ( EscapeSequence | ~('\u0000'..'\u001f' | '\\' | '\"' ) )* '"'
|
||||
;
|
||||
|
||||
WS: (' '|'\n'|'\r'|'\t')+ {$channel=HIDDEN;} ; // ignore whitespace
|
||||
|
||||
fragment EscapeSequence
|
||||
: '\\' (UnicodeEscape |'b'|'t'|'n'|'f'|'r'|'\"'|'\''|'\\'|'\/')
|
||||
;
|
||||
|
||||
fragment UnicodeEscape
|
||||
: 'u' HexDigit HexDigit HexDigit HexDigit
|
||||
;
|
||||
|
||||
fragment HexDigit
|
||||
: '0'..'9' | 'A'..'F' | 'a'..'f'
|
||||
;
|
||||
|
||||
fragment Digit
|
||||
: '0'..'9'
|
||||
;
|
||||
|
||||
+162
@@ -0,0 +1,162 @@
|
||||
tree grammar JSONTree;
|
||||
|
||||
options {
|
||||
tokenVocab=JSON; // reuse token types
|
||||
ASTLabelType=CommonTree; // $label will have type CommonTree
|
||||
}
|
||||
|
||||
@header {
|
||||
package com.github.gumtreediff.gen.antlr3.json;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Map;
|
||||
import java.util.HashMap;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.OutputStreamWriter;
|
||||
|
||||
}
|
||||
|
||||
@members {
|
||||
private Object extractNumber(CommonTree numberToken, CommonTree exponentToken) {
|
||||
String numberBody = numberToken.getText();
|
||||
String exponent = (exponentToken == null) ? null : exponentToken.getText().substring(1); // remove the 'e' prefix if there
|
||||
boolean isReal = numberBody.indexOf('.') >= 0 || exponent != null;
|
||||
if (!isReal) {
|
||||
return new Integer(numberBody);
|
||||
} else {
|
||||
double result = Double.parseDouble(numberBody);
|
||||
if (exponent != null) {
|
||||
result = result * Math.pow(10.0f, Double.parseDouble(exponent));
|
||||
}
|
||||
return new Double(result);
|
||||
}
|
||||
}
|
||||
|
||||
private String extractString(CommonTree token) {
|
||||
// StringBuffers are an efficient way to modify strings
|
||||
StringBuffer sb = new StringBuffer(token.getText());
|
||||
// Process character escapes
|
||||
int startPoint = 1; // skip initial quotation mark
|
||||
for (;;) {
|
||||
int slashIndex = sb.indexOf("\\", startPoint); // search for a single backslash
|
||||
if (slashIndex == -1) break;
|
||||
// Else, we have a backslash
|
||||
char escapeType = sb.charAt(slashIndex + 1);
|
||||
switch (escapeType) {
|
||||
case'u':
|
||||
// Unicode escape.
|
||||
String unicode = extractUnicode(sb, slashIndex);
|
||||
sb.replace(slashIndex, slashIndex + 6, unicode); // backspace
|
||||
break; // back to the loop
|
||||
|
||||
// note: Java's character escapes match JSON's, which is why it looks like we're replacing
|
||||
// "\b" with "\b". We're actually replacing 2 characters (slash-b) with one (backspace).
|
||||
case 'b':
|
||||
sb.replace(slashIndex, slashIndex + 2, "\b"); // backspace
|
||||
break;
|
||||
|
||||
case 't':
|
||||
sb.replace(slashIndex, slashIndex + 2, "\t"); // tab
|
||||
break;
|
||||
|
||||
case 'n':
|
||||
sb.replace(slashIndex, slashIndex + 2, "\n"); // newline
|
||||
break;
|
||||
|
||||
case 'f':
|
||||
sb.replace(slashIndex, slashIndex + 2, "\f"); // form feed
|
||||
break;
|
||||
|
||||
case 'r':
|
||||
sb.replace(slashIndex, slashIndex + 2, "\r"); // return
|
||||
break;
|
||||
|
||||
case '\'':
|
||||
sb.replace(slashIndex, slashIndex + 2, "\'"); // single quote
|
||||
break;
|
||||
|
||||
case '\"':
|
||||
sb.replace(slashIndex, slashIndex + 2, "\""); // double quote
|
||||
break;
|
||||
|
||||
case '\\':
|
||||
sb.replace(slashIndex, slashIndex + 2, "\\"); // backslash
|
||||
break;
|
||||
|
||||
case '/':
|
||||
sb.replace(slashIndex, slashIndex + 2, "/"); // solidus
|
||||
break;
|
||||
|
||||
}
|
||||
startPoint = slashIndex+1;
|
||||
|
||||
}
|
||||
|
||||
// remove surrounding quotes
|
||||
sb.deleteCharAt(0);
|
||||
sb.deleteCharAt(sb.length() - 1);
|
||||
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
private String extractUnicode(StringBuffer sb, int slashIndex) {
|
||||
// Gather the 4 hex digits, convert to an integer, translate the number to a unicode char, replace
|
||||
String result;
|
||||
String code = sb.substring(slashIndex + 2, slashIndex + 6);
|
||||
int charNum = Integer.parseInt(code, 16); // hex to integer
|
||||
// There's no simple way to go from an int to a unicode character.
|
||||
// We'll have to pass this through an output stream writer to do
|
||||
// the conversion.
|
||||
try {
|
||||
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
||||
OutputStreamWriter osw = new OutputStreamWriter(baos, "UTF-8");
|
||||
osw.write(charNum);
|
||||
osw.flush();
|
||||
result = baos.toString("UTF-8"); // Thanks to Silvester Pozarnik for the tip about adding "UTF-8" here
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
result = null;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
value returns [Object result]
|
||||
: s=string { $result = s; }
|
||||
| n=number { $result = n; }
|
||||
| o=object { $result = o; }
|
||||
| a=array { $result = a; }
|
||||
| TRUE { $result=Boolean.TRUE; }
|
||||
| FALSE {$result = Boolean.FALSE; }
|
||||
| NULL {$result = null; }
|
||||
;
|
||||
|
||||
string returns [String result]
|
||||
: ^(STRING String)
|
||||
{ $result = extractString($String); }
|
||||
;
|
||||
|
||||
object returns [Map result]
|
||||
@init { result = new HashMap(); }
|
||||
: ^(OBJECT pair[$result]+)
|
||||
;
|
||||
|
||||
number returns [Object result]
|
||||
: ^(NUMBER Number Exponent?)
|
||||
{ $result = extractNumber($Number, $Exponent); }
|
||||
;
|
||||
|
||||
array returns [List list]
|
||||
@init{ list = new ArrayList(); }
|
||||
: ^(ARRAY (v=value {$list.add(v); })* )
|
||||
;
|
||||
|
||||
pair [Map map]
|
||||
: ^(FIELD key=String v=value)
|
||||
{ $map.put(extractString($key), v); }
|
||||
;
|
||||
|
||||
|
||||
|
||||
+50
@@ -0,0 +1,50 @@
|
||||
/*
|
||||
* This file is part of GumTree.
|
||||
*
|
||||
* GumTree is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* GumTree is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with GumTree. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* Copyright 2011-2015 Jean-Rémy Falleri <jr.falleri@gmail.com>
|
||||
* Copyright 2011-2015 Floréal Morandat <florealm@gmail.com>
|
||||
*/
|
||||
|
||||
package com.github.gumtreediff.gen.antlr3.json;
|
||||
|
||||
import com.github.gumtreediff.gen.Register;
|
||||
import com.github.gumtreediff.gen.antlr3.AbstractAntlr3TreeGenerator;
|
||||
import org.antlr.runtime.*;
|
||||
|
||||
|
||||
@Register(id = "json-antlr", accept = "\\.json$")
|
||||
public class AntlrJsonTreeGenerator extends AbstractAntlr3TreeGenerator<JSONLexer, JSONParser> {
|
||||
|
||||
@Override
|
||||
protected JSONLexer getLexer(ANTLRStringStream stream) {
|
||||
return new JSONLexer(stream);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected JSONParser getParser(TokenStream tokens) {
|
||||
return new JSONParser(tokens);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected RuleReturnScope getStartRule(JSONParser parser) throws RecognitionException {
|
||||
return parser.value();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected final String[] getTokenNames() {
|
||||
return JSONParser.tokenNames;
|
||||
}
|
||||
}
|
||||
+42
@@ -0,0 +1,42 @@
|
||||
/*
|
||||
* This file is part of GumTree.
|
||||
*
|
||||
* GumTree is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* GumTree is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with GumTree. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* Copyright 2011-2015 Jean-Rémy Falleri <jr.falleri@gmail.com>
|
||||
* Copyright 2011-2015 Floréal Morandat <florealm@gmail.com>
|
||||
*/
|
||||
|
||||
package com.github.gumtreediff.gen.antlr3.json;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
import java.io.InputStreamReader;
|
||||
|
||||
import com.github.gumtreediff.tree.ITree;
|
||||
import com.github.gumtreediff.tree.TreeContext;
|
||||
import org.junit.Test;
|
||||
|
||||
public class TestJsonParsing {
|
||||
|
||||
@Test
|
||||
public void testJsonParsing() throws Exception {
|
||||
TreeContext tc = new AntlrJsonTreeGenerator().generateFromReader(
|
||||
new InputStreamReader(getClass().getResourceAsStream("/sample.json")));
|
||||
ITree tree = tc.getRoot();
|
||||
assertEquals(4, tree.getType());
|
||||
assertEquals(37, tree.getSize());
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
[
|
||||
{
|
||||
"an_object": {
|
||||
"a": 1,
|
||||
"b": 1,
|
||||
"c": "foo",
|
||||
"d": true
|
||||
},
|
||||
"an_array": [true, true, true]
|
||||
},
|
||||
[[{}]],
|
||||
[1, 2, 3],
|
||||
true
|
||||
]
|
||||
@@ -0,0 +1,510 @@
|
||||
|
||||
|
||||
{
|
||||
"items": [
|
||||
{
|
||||
"owner": {
|
||||
"reputation": 16,
|
||||
"user_id": 2473093,
|
||||
"user_type": "registered",
|
||||
"profile_image": "http:\/\/i.stack.imgur.com\/Oh4Gc.jpg?s=128&g=1",
|
||||
"display_name": "urman",
|
||||
"link": "http:\/\/stackoverflow.com\/users\/2473093\/urman"
|
||||
},
|
||||
"is_accepted": false,
|
||||
"score": 0,
|
||||
"last_activity_date": 1431591411,
|
||||
"last_edit_date": 1431591411,
|
||||
"creation_date": 1431582116,
|
||||
"answer_id": 30230049,
|
||||
"question_id": 30148202
|
||||
},
|
||||
{
|
||||
"owner": {
|
||||
"reputation": 52,
|
||||
"user_id": 4864889,
|
||||
"user_type": "registered",
|
||||
"profile_image": "https:\/\/www.gravatar.com\/avatar\/8378261cf0d4950301ad65087487f51b?s=128&d=identicon&r=PG&f=1",
|
||||
"display_name": "Amir H",
|
||||
"link": "http:\/\/stackoverflow.com\/users\/4864889\/amir-h"
|
||||
},
|
||||
"is_accepted": false,
|
||||
"score": 0,
|
||||
"last_activity_date": 1431591407,
|
||||
"creation_date": 1431591407,
|
||||
"answer_id": 30232512,
|
||||
"question_id": 30231345
|
||||
},
|
||||
{
|
||||
"owner": {
|
||||
"reputation": 1523,
|
||||
"user_id": 4391147,
|
||||
"user_type": "registered",
|
||||
"profile_image": "https:\/\/lh5.googleusercontent.com\/-WJ2zykPbiqI\/AAAAAAAAAAI\/AAAAAAAAAng\/9C2D_oliqD8\/photo.jpg?sz=128",
|
||||
"display_name": "Alexander Dayan",
|
||||
"link": "http:\/\/stackoverflow.com\/users\/4391147\/alexander-dayan"
|
||||
},
|
||||
"is_accepted": false,
|
||||
"score": 0,
|
||||
"last_activity_date": 1431591407,
|
||||
"creation_date": 1431591407,
|
||||
"answer_id": 30232511,
|
||||
"question_id": 30232423
|
||||
},
|
||||
{
|
||||
"owner": {
|
||||
"reputation": 9,
|
||||
"user_id": 3433258,
|
||||
"user_type": "registered",
|
||||
"profile_image": "https:\/\/www.gravatar.com\/avatar\/31795b700ed9401855a752f1728565e9?s=128&d=identicon&r=PG&f=1",
|
||||
"display_name": "swapnilagarwal",
|
||||
"link": "http:\/\/stackoverflow.com\/users\/3433258\/swapnilagarwal"
|
||||
},
|
||||
"is_accepted": false,
|
||||
"score": 0,
|
||||
"last_activity_date": 1431591405,
|
||||
"creation_date": 1431591405,
|
||||
"answer_id": 30232510,
|
||||
"question_id": 30227759
|
||||
},
|
||||
{
|
||||
"owner": {
|
||||
"reputation": 94,
|
||||
"user_id": 1808654,
|
||||
"user_type": "registered",
|
||||
"accept_rate": 89,
|
||||
"profile_image": "https:\/\/www.gravatar.com\/avatar\/f685c091ceb85bd4053dfc84c3b1fc74?s=128&d=identicon&r=PG",
|
||||
"display_name": "oyjh",
|
||||
"link": "http:\/\/stackoverflow.com\/users\/1808654\/oyjh"
|
||||
},
|
||||
"is_accepted": false,
|
||||
"score": 0,
|
||||
"last_activity_date": 1431591395,
|
||||
"creation_date": 1431591395,
|
||||
"answer_id": 30232509,
|
||||
"question_id": 30209710
|
||||
},
|
||||
{
|
||||
"owner": {
|
||||
"reputation": 123,
|
||||
"user_id": 2589810,
|
||||
"user_type": "registered",
|
||||
"profile_image": "http:\/\/graph.facebook.com\/1195031301\/picture?type=large",
|
||||
"display_name": "Akshin Jalilov",
|
||||
"link": "http:\/\/stackoverflow.com\/users\/2589810\/akshin-jalilov"
|
||||
},
|
||||
"is_accepted": false,
|
||||
"score": 0,
|
||||
"last_activity_date": 1431591388,
|
||||
"creation_date": 1431591388,
|
||||
"answer_id": 30232508,
|
||||
"question_id": 30224912
|
||||
},
|
||||
{
|
||||
"owner": {
|
||||
"reputation": 2871,
|
||||
"user_id": 4519059,
|
||||
"user_type": "registered",
|
||||
"accept_rate": 17,
|
||||
"profile_image": "http:\/\/i.stack.imgur.com\/RDPZo.png?s=128&g=1",
|
||||
"display_name": "shA.t",
|
||||
"link": "http:\/\/stackoverflow.com\/users\/4519059\/sha-t"
|
||||
},
|
||||
"is_accepted": false,
|
||||
"score": 0,
|
||||
"last_activity_date": 1431591366,
|
||||
"last_edit_date": 1431591366,
|
||||
"creation_date": 1431587344,
|
||||
"answer_id": 30231391,
|
||||
"question_id": 30228478
|
||||
},
|
||||
{
|
||||
"owner": {
|
||||
"reputation": 128178,
|
||||
"user_id": 330315,
|
||||
"user_type": "registered",
|
||||
"accept_rate": 83,
|
||||
"profile_image": "https:\/\/www.gravatar.com\/avatar\/4b152262d9ba55197f609625358ff7e0?s=128&d=identicon&r=PG",
|
||||
"display_name": "a_horse_with_no_name",
|
||||
"link": "http:\/\/stackoverflow.com\/users\/330315\/a-horse-with-no-name"
|
||||
},
|
||||
"is_accepted": false,
|
||||
"score": 0,
|
||||
"last_activity_date": 1431591343,
|
||||
"creation_date": 1431591343,
|
||||
"answer_id": 30232502,
|
||||
"question_id": 30231832
|
||||
},
|
||||
{
|
||||
"owner": {
|
||||
"reputation": 750,
|
||||
"user_id": 2468158,
|
||||
"user_type": "registered",
|
||||
"profile_image": "http:\/\/i.stack.imgur.com\/LSk1F.jpg?s=128&g=1",
|
||||
"display_name": "Drumbeg",
|
||||
"link": "http:\/\/stackoverflow.com\/users\/2468158\/drumbeg"
|
||||
},
|
||||
"is_accepted": false,
|
||||
"score": 0,
|
||||
"last_activity_date": 1431591341,
|
||||
"last_edit_date": 1431591341,
|
||||
"creation_date": 1431590718,
|
||||
"answer_id": 30232332,
|
||||
"question_id": 30231746
|
||||
},
|
||||
{
|
||||
"owner": {
|
||||
"reputation": 28424,
|
||||
"user_id": 1256624,
|
||||
"user_type": "registered",
|
||||
"profile_image": "http:\/\/i.stack.imgur.com\/EdJaa.jpg?s=128&g=1",
|
||||
"display_name": "huon-dbaupp",
|
||||
"link": "http:\/\/stackoverflow.com\/users\/1256624\/huon-dbaupp"
|
||||
},
|
||||
"is_accepted": false,
|
||||
"score": 0,
|
||||
"last_activity_date": 1431591335,
|
||||
"creation_date": 1431591335,
|
||||
"answer_id": 30232500,
|
||||
"question_id": 30177395
|
||||
},
|
||||
{
|
||||
"owner": {
|
||||
"reputation": 11,
|
||||
"user_id": 4799901,
|
||||
"user_type": "registered",
|
||||
"profile_image": "http:\/\/graph.facebook.com\/851364241589275\/picture?type=large",
|
||||
"display_name": "Sågär \u015aåxë\u0144á",
|
||||
"link": "http:\/\/stackoverflow.com\/users\/4799901\/s%c3%a5g%c3%a4r-%c5%9a%c3%a5x%c3%ab%c5%84%c3%a1"
|
||||
},
|
||||
"is_accepted": false,
|
||||
"score": 0,
|
||||
"last_activity_date": 1431591333,
|
||||
"creation_date": 1431591333,
|
||||
"answer_id": 30232499,
|
||||
"question_id": 12258814
|
||||
},
|
||||
{
|
||||
"owner": {
|
||||
"reputation": 76046,
|
||||
"user_id": 1919155,
|
||||
"user_type": "registered",
|
||||
"profile_image": "https:\/\/www.gravatar.com\/avatar\/0d7d26642f016f64f37619d209037dff?s=128&d=identicon&r=PG",
|
||||
"display_name": "Mats Petersson",
|
||||
"link": "http:\/\/stackoverflow.com\/users\/1919155\/mats-petersson"
|
||||
},
|
||||
"is_accepted": false,
|
||||
"score": 0,
|
||||
"last_activity_date": 1431591333,
|
||||
"creation_date": 1431591333,
|
||||
"answer_id": 30232498,
|
||||
"question_id": 30231938
|
||||
},
|
||||
{
|
||||
"owner": {
|
||||
"reputation": 21598,
|
||||
"user_id": 17875,
|
||||
"user_type": "registered",
|
||||
"profile_image": "https:\/\/www.gravatar.com\/avatar\/9589a0b8efc6bb869bedfa51e7d28f16?s=128&d=identicon&r=PG",
|
||||
"display_name": "Eevee",
|
||||
"link": "http:\/\/stackoverflow.com\/users\/17875\/eevee"
|
||||
},
|
||||
"is_accepted": false,
|
||||
"score": 0,
|
||||
"last_activity_date": 1431591321,
|
||||
"creation_date": 1431591321,
|
||||
"answer_id": 30232496,
|
||||
"question_id": 30232421
|
||||
},
|
||||
{
|
||||
"owner": {
|
||||
"reputation": 11,
|
||||
"user_id": 4890577,
|
||||
"user_type": "registered",
|
||||
"profile_image": "http:\/\/i.stack.imgur.com\/aehYB.png?s=128&g=1",
|
||||
"display_name": "lord63. j",
|
||||
"link": "http:\/\/stackoverflow.com\/users\/4890577\/lord63-j"
|
||||
},
|
||||
"is_accepted": false,
|
||||
"score": 1,
|
||||
"last_activity_date": 1431591321,
|
||||
"creation_date": 1431591321,
|
||||
"answer_id": 30232495,
|
||||
"question_id": 30232344
|
||||
},
|
||||
{
|
||||
"owner": {
|
||||
"reputation": 10121,
|
||||
"user_id": 1351469,
|
||||
"user_type": "registered",
|
||||
"accept_rate": 100,
|
||||
"profile_image": "https:\/\/www.gravatar.com\/avatar\/d0a659b0aa7c7dfc45ab9cff52f3c140?s=128&d=identicon&r=PG",
|
||||
"display_name": "jcesarmobile",
|
||||
"link": "http:\/\/stackoverflow.com\/users\/1351469\/jcesarmobile"
|
||||
},
|
||||
"is_accepted": false,
|
||||
"score": 0,
|
||||
"last_activity_date": 1431591320,
|
||||
"creation_date": 1431591320,
|
||||
"answer_id": 30232494,
|
||||
"question_id": 30217167
|
||||
},
|
||||
{
|
||||
"owner": {
|
||||
"reputation": 1,
|
||||
"user_id": 4896508,
|
||||
"user_type": "registered",
|
||||
"profile_image": "https:\/\/www.gravatar.com\/avatar\/d9be840fb80aed5a6b27da4b78452b74?s=128&d=identicon&r=PG&f=1",
|
||||
"display_name": "Leo",
|
||||
"link": "http:\/\/stackoverflow.com\/users\/4896508\/leo"
|
||||
},
|
||||
"is_accepted": false,
|
||||
"score": 0,
|
||||
"last_activity_date": 1431591309,
|
||||
"creation_date": 1431591309,
|
||||
"answer_id": 30232492,
|
||||
"question_id": 30224254
|
||||
},
|
||||
{
|
||||
"owner": {
|
||||
"reputation": 76,
|
||||
"user_id": 4628456,
|
||||
"user_type": "registered",
|
||||
"profile_image": "https:\/\/www.gravatar.com\/avatar\/b1217b1f012b0638d589bcdfdb27fe8b?s=128&d=identicon&r=PG&f=1",
|
||||
"display_name": "swelsh",
|
||||
"link": "http:\/\/stackoverflow.com\/users\/4628456\/swelsh"
|
||||
},
|
||||
"is_accepted": false,
|
||||
"score": 0,
|
||||
"last_activity_date": 1431591308,
|
||||
"creation_date": 1431591308,
|
||||
"answer_id": 30232490,
|
||||
"question_id": 30223997
|
||||
},
|
||||
{
|
||||
"owner": {
|
||||
"reputation": 44,
|
||||
"user_id": 162615,
|
||||
"user_type": "registered",
|
||||
"profile_image": "https:\/\/www.gravatar.com\/avatar\/647972e0840d0dd84e87a4317f0c91c7?s=128&d=identicon&r=PG",
|
||||
"display_name": "Thommas",
|
||||
"link": "http:\/\/stackoverflow.com\/users\/162615\/thommas"
|
||||
},
|
||||
"is_accepted": false,
|
||||
"score": 0,
|
||||
"last_activity_date": 1431591302,
|
||||
"creation_date": 1431591302,
|
||||
"answer_id": 30232489,
|
||||
"question_id": 23519983
|
||||
},
|
||||
{
|
||||
"owner": {
|
||||
"reputation": 28,
|
||||
"user_id": 3302933,
|
||||
"user_type": "registered",
|
||||
"profile_image": "https:\/\/www.gravatar.com\/avatar\/f25042331fe29187bfd5ad2a5eb461c2?s=128&d=identicon&r=PG",
|
||||
"display_name": "JVercout",
|
||||
"link": "http:\/\/stackoverflow.com\/users\/3302933\/jvercout"
|
||||
},
|
||||
"is_accepted": false,
|
||||
"score": 0,
|
||||
"last_activity_date": 1431591292,
|
||||
"creation_date": 1431591292,
|
||||
"answer_id": 30232487,
|
||||
"question_id": 30229995
|
||||
},
|
||||
{
|
||||
"owner": {
|
||||
"reputation": 28575,
|
||||
"user_id": 704848,
|
||||
"user_type": "registered",
|
||||
"profile_image": "https:\/\/www.gravatar.com\/avatar\/3f9be2c2958e208c8d9b629ac43c9c42?s=128&d=identicon&r=PG",
|
||||
"display_name": "EdChum",
|
||||
"link": "http:\/\/stackoverflow.com\/users\/704848\/edchum"
|
||||
},
|
||||
"is_accepted": false,
|
||||
"score": 0,
|
||||
"last_activity_date": 1431591291,
|
||||
"creation_date": 1431591291,
|
||||
"answer_id": 30232486,
|
||||
"question_id": 30230548
|
||||
},
|
||||
{
|
||||
"owner": {
|
||||
"reputation": 12492,
|
||||
"user_id": 2435473,
|
||||
"user_type": "registered",
|
||||
"accept_rate": 60,
|
||||
"profile_image": "http:\/\/i.stack.imgur.com\/GOWOI.jpg?s=128&g=1",
|
||||
"display_name": "pankajparkar",
|
||||
"link": "http:\/\/stackoverflow.com\/users\/2435473\/pankajparkar"
|
||||
},
|
||||
"is_accepted": true,
|
||||
"score": 1,
|
||||
"last_activity_date": 1431591288,
|
||||
"last_edit_date": 1431591288,
|
||||
"creation_date": 1431590547,
|
||||
"answer_id": 30232282,
|
||||
"question_id": 30232179
|
||||
},
|
||||
{
|
||||
"owner": {
|
||||
"reputation": 5733,
|
||||
"user_id": 3518452,
|
||||
"user_type": "registered",
|
||||
"accept_rate": 94,
|
||||
"profile_image": "https:\/\/www.gravatar.com\/avatar\/71c8adf8d0ebc93a00ac2a0498509091?s=128&d=identicon&r=PG",
|
||||
"display_name": "rnevius",
|
||||
"link": "http:\/\/stackoverflow.com\/users\/3518452\/rnevius"
|
||||
},
|
||||
"is_accepted": false,
|
||||
"score": 0,
|
||||
"last_activity_date": 1431591286,
|
||||
"creation_date": 1431591286,
|
||||
"answer_id": 30232484,
|
||||
"question_id": 30232305
|
||||
},
|
||||
{
|
||||
"owner": {
|
||||
"reputation": 58530,
|
||||
"user_id": 92315,
|
||||
"user_type": "registered",
|
||||
"accept_rate": 50,
|
||||
"profile_image": "https:\/\/www.gravatar.com\/avatar\/d2824c2017a878f6fe05db2797694608?s=128&d=identicon&r=PG",
|
||||
"display_name": "Fabien Ménager",
|
||||
"link": "http:\/\/stackoverflow.com\/users\/92315\/fabien-m%c3%a9nager"
|
||||
},
|
||||
"is_accepted": true,
|
||||
"score": 4706,
|
||||
"last_activity_date": 1431591279,
|
||||
"last_edit_date": 1431591279,
|
||||
"creation_date": 1259067936,
|
||||
"answer_id": 1789952,
|
||||
"question_id": 1789945
|
||||
},
|
||||
{
|
||||
"owner": {
|
||||
"reputation": 341,
|
||||
"user_id": 3254377,
|
||||
"user_type": "registered",
|
||||
"profile_image": "https:\/\/www.gravatar.com\/avatar\/108584ca35efbc205efe9160bb3d7fc7?s=128&d=identicon&r=PG&f=1",
|
||||
"display_name": "wsl",
|
||||
"link": "http:\/\/stackoverflow.com\/users\/3254377\/wsl"
|
||||
},
|
||||
"is_accepted": false,
|
||||
"score": 0,
|
||||
"last_activity_date": 1431591266,
|
||||
"creation_date": 1431591266,
|
||||
"answer_id": 30232479,
|
||||
"question_id": 30232349
|
||||
},
|
||||
{
|
||||
"owner": {
|
||||
"reputation": 699,
|
||||
"user_id": 1519186,
|
||||
"user_type": "registered",
|
||||
"accept_rate": 100,
|
||||
"profile_image": "http:\/\/i.stack.imgur.com\/VJWGi.jpg?s=128&g=1",
|
||||
"display_name": "Marco Kerwitz",
|
||||
"link": "http:\/\/stackoverflow.com\/users\/1519186\/marco-kerwitz"
|
||||
},
|
||||
"is_accepted": false,
|
||||
"score": 0,
|
||||
"last_activity_date": 1431591260,
|
||||
"last_edit_date": 1431591260,
|
||||
"creation_date": 1431590862,
|
||||
"answer_id": 30232366,
|
||||
"question_id": 30232320
|
||||
},
|
||||
{
|
||||
"owner": {
|
||||
"reputation": 13,
|
||||
"user_id": 1827885,
|
||||
"user_type": "registered",
|
||||
"profile_image": "https:\/\/www.gravatar.com\/avatar\/3f3fe425330ed46481d3abdac97da62c?s=128&d=identicon&r=PG",
|
||||
"display_name": "Mebibyte",
|
||||
"link": "http:\/\/stackoverflow.com\/users\/1827885\/mebibyte"
|
||||
},
|
||||
"is_accepted": false,
|
||||
"score": 1,
|
||||
"last_activity_date": 1431591259,
|
||||
"last_edit_date": 1431591259,
|
||||
"creation_date": 1431590808,
|
||||
"answer_id": 30232355,
|
||||
"question_id": 30232095
|
||||
},
|
||||
{
|
||||
"owner": {
|
||||
"reputation": 1944,
|
||||
"user_id": 1485701,
|
||||
"user_type": "registered",
|
||||
"accept_rate": 67,
|
||||
"profile_image": "http:\/\/i.stack.imgur.com\/2XZYq.jpg?s=128&g=1",
|
||||
"display_name": "Antoine",
|
||||
"link": "http:\/\/stackoverflow.com\/users\/1485701\/antoine"
|
||||
},
|
||||
"is_accepted": false,
|
||||
"score": 0,
|
||||
"last_activity_date": 1431591256,
|
||||
"last_edit_date": 1431591256,
|
||||
"creation_date": 1431087914,
|
||||
"answer_id": 30123839,
|
||||
"question_id": 19196659
|
||||
},
|
||||
{
|
||||
"owner": {
|
||||
"reputation": 91,
|
||||
"user_id": 4711799,
|
||||
"user_type": "registered",
|
||||
"profile_image": "https:\/\/www.gravatar.com\/avatar\/1b2ec531248f7ad1c32328c9de0d2171?s=128&d=identicon&r=PG&f=1",
|
||||
"display_name": "BDH",
|
||||
"link": "http:\/\/stackoverflow.com\/users\/4711799\/bdh"
|
||||
},
|
||||
"is_accepted": false,
|
||||
"score": 0,
|
||||
"last_activity_date": 1431591242,
|
||||
"creation_date": 1431591242,
|
||||
"answer_id": 30232474,
|
||||
"question_id": 30232171
|
||||
},
|
||||
{
|
||||
"owner": {
|
||||
"reputation": 891,
|
||||
"user_id": 978690,
|
||||
"user_type": "registered",
|
||||
"accept_rate": 86,
|
||||
"profile_image": "https:\/\/www.gravatar.com\/avatar\/700764aebc81328fccad1fbd558dca75?s=128&d=identicon&r=PG",
|
||||
"display_name": "rap-2-h",
|
||||
"link": "http:\/\/stackoverflow.com\/users\/978690\/rap-2-h"
|
||||
},
|
||||
"is_accepted": false,
|
||||
"score": 0,
|
||||
"last_activity_date": 1431591242,
|
||||
"creation_date": 1431591242,
|
||||
"answer_id": 30232473,
|
||||
"question_id": 30232334
|
||||
},
|
||||
{
|
||||
"owner": {
|
||||
"reputation": 672,
|
||||
"user_id": 2064336,
|
||||
"user_type": "registered",
|
||||
"accept_rate": 75,
|
||||
"profile_image": "http:\/\/i.stack.imgur.com\/NpJar.jpg?s=128&g=1",
|
||||
"display_name": "Jaydipsinh Zala",
|
||||
"link": "http:\/\/stackoverflow.com\/users\/2064336\/jaydipsinh-zala"
|
||||
},
|
||||
"is_accepted": false,
|
||||
"score": 0,
|
||||
"last_activity_date": 1431591241,
|
||||
"last_edit_date": 1431591241,
|
||||
"creation_date": 1431588560,
|
||||
"answer_id": 30231742,
|
||||
"question_id": 16893209
|
||||
}
|
||||
],
|
||||
"has_more": true,
|
||||
"quota_max": 300,
|
||||
"quota_remaining": 287
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user