@@ -488,6 +488,7 @@ JSOBJ NpyArr_iterGetValue(JSOBJ obj, JSONTypeContext *tc)
488488
489489char * NpyArr_iterGetName (JSOBJ obj , JSONTypeContext * tc , size_t * outLen )
490490{
491+ JSONObjectEncoder * enc = (JSONObjectEncoder * ) tc -> encoder ;
491492 NpyArrContext * npyarr ;
492493 npy_intp idx ;
493494 PRINTMARK ();
@@ -496,13 +497,19 @@ char *NpyArr_iterGetName(JSOBJ obj, JSONTypeContext *tc, size_t *outLen)
496497 {
497498 idx = npyarr -> index [npyarr -> stridedim ] - 1 ;
498499 * outLen = strlen (npyarr -> columnLabels [idx ]);
499- return npyarr -> columnLabels [idx ];
500+ memcpy (enc -> offset , npyarr -> columnLabels [idx ], sizeof (char )* (* outLen ));
501+ enc -> offset += * outLen ;
502+ * outLen = 0 ;
503+ return NULL ;
500504 }
501505 else
502506 {
503507 idx = npyarr -> index [npyarr -> stridedim - npyarr -> inc ] - 1 ;
504508 * outLen = strlen (npyarr -> rowLabels [idx ]);
505- return npyarr -> rowLabels [idx ];
509+ memcpy (enc -> offset , npyarr -> rowLabels [idx ], sizeof (char )* (* outLen ));
510+ enc -> offset += * outLen ;
511+ * outLen = 0 ;
512+ return NULL ;
506513 }
507514}
508515
@@ -1064,7 +1071,7 @@ char** NpyArr_encodeLabels(PyArrayObject* labels, JSONObjectEncoder* enc, npy_in
10641071 // NOTE this function steals a reference to labels.
10651072 PyArrayObject * labelsTmp = NULL ;
10661073 PyObject * item = NULL ;
1067- npy_intp i , stride , len ;
1074+ npy_intp i , stride , len , need_quotes ;
10681075 char * * ret ;
10691076 char * dataptr , * cLabel , * origend , * origst , * origoffset ;
10701077 char labelBuffer [NPY_JSON_BUFSIZE ];
@@ -1117,15 +1124,8 @@ char** NpyArr_encodeLabels(PyArrayObject* labels, JSONObjectEncoder* enc, npy_in
11171124 break ;
11181125 }
11191126
1120- // trim off any quotes surrounding the result
1121- if (* cLabel == '\"' )
1122- {
1123- cLabel ++ ;
1124- enc -> offset -= 2 ;
1125- * (enc -> offset ) = '\0' ;
1126- }
1127-
1128- len = enc -> offset - cLabel + 1 ;
1127+ need_quotes = ((* cLabel ) != '"' );
1128+ len = enc -> offset - cLabel + 1 + 2 * need_quotes ;
11291129 ret [i ] = PyObject_Malloc (sizeof (char )* len );
11301130
11311131 if (!ret [i ])
@@ -1135,7 +1135,18 @@ char** NpyArr_encodeLabels(PyArrayObject* labels, JSONObjectEncoder* enc, npy_in
11351135 break ;
11361136 }
11371137
1138- memcpy (ret [i ], cLabel , sizeof (char )* len );
1138+ if (need_quotes )
1139+ {
1140+ ret [i ][0 ] = '"' ;
1141+ memcpy (ret [i ]+ 1 , cLabel , sizeof (char )* (len - 4 ));
1142+ ret [i ][len - 3 ] = '"' ;
1143+ }
1144+ else
1145+ {
1146+ memcpy (ret [i ], cLabel , sizeof (char )* (len - 2 ));
1147+ }
1148+ ret [i ][len - 2 ] = ':' ;
1149+ ret [i ][len - 1 ] = '\0' ;
11391150 dataptr += stride ;
11401151 }
11411152
0 commit comments