Is the following database design good in the following table for the situation explained below
I am wondering if I should ask the person who created this to change
  the database design? As far as I know, having duplicate values in the
  same column is a violation of some normal form?


If the table is on the "many" side of a relationship, it can be the case that duplicates are stored in a "foreign key" column (eg see the DEPARTMENT_ID column of Oracle's sample HR.EMPLOYEES table below).  Thus, without knowing all the other details of the design - and taking them into account -, it may not be advantageous to ask for any changes to be made.

-- using https://livesql.oracle.com ...
select employee_id, last_name, department_id from hr.employees ;

EMPLOYEE_ID  LAST_NAME     DEPARTMENT_ID
100          King          90
101          Kochhar       90
102          De Haan       90
103          Hunold        60
104          Ernst         60
105          Austin        60
106          Pataballa     60
107          Lorentz       60
108          Greenberg    100
109          Faviet       100
110          Chen         100
...



  Also, while programming, I am not sure how would I know that I need to
  stop at DATAID=2 to know that my first heading will be Capital,Summary
  etc and then again, I am not sure how would I know to stop at 6 to
  know that my second heading is First Reports.


In your test table, the headings are already mapped to DATADESC.  The only item changed in the example below is: the column called DESC is now: DESC_ (as the word DESC is a reserved word - this, by the way, is something that probably should be changed: the name of column DESC).

-- table and data
create table T ( desc_ , datadesc, dataid )
as
select 'Capital,Summary etc'
, 'Counts of capital and summary', 1 from dual union
select 'Capital,Summary etc'
, 'Testing of capital and summary ', 2 from dual union
select 'First Reports'
, 'Completed Successfully', 3 from dual union
select 'First Reports'
, 'Still Pending', 4 from dual union
select 'First Reports'
, 'Failed twice ', 5 from dual union
select 'First Reports'
, 'Re attempting ...', 6 from dual ;

-- data
select * from T ;

DESC_                   DATADESC                        DATAID
Capital,Summary etc     Counts of capital and summary   1
Capital,Summary etc     Testing of capital and summary  2
First Reports           Completed Successfully          3
First Reports           Failed twice                    5
First Reports           Re attempting ...               6
First Reports           Still Pending                   4


You can get this resultset in JSON format, too.  Eg if you are using Oracle version 18.0 (eg @ https://livesql.oracle.com):

Query

select 
  json_object( 
    'desc_' is DESC_
  , 'datadesc' is DATADESC
  , 'dataid' is DATAID  
  )
from T 
order by dataid ;


Result

{
"desc_" : "Capital,Summary etc",
"datadesc" : "Counts of capital and summary",
"dataid" : 1
}
{
"desc_" : "Capital,Summary etc",
"datadesc" : "Testing of capital and summary ",
"dataid" : 2
}
{
"desc_" : "First Reports",
"datadesc" : "Completed Successfully",
"dataid" : 3
}
{
"desc_" : "First Reports",
"datadesc" : "Still Pending",
"dataid" : 4
}
{
"desc_" : "First Reports",
"datadesc" : "Failed twice ",
"dataid" : 5
}
{
"desc_" : "First Reports",
"datadesc" : "Re attempting ...",
"dataid" : 6
}


Another example - using sqlcl and Oracle version 12c release 12.1.0.2.0:

set sqlformat json

select * from T order by dataid ;

-- line breaks added for clarity
{"results":[{"columns":[{"name":"DESC_","type":"NUMBER"},{"name":"DATADESC","type":"NUMBER"},{"name":"DATAID","type":"NUMBER"}],"items":

[
 {"desc_":"Capital,Summary etc","datadesc":"Counts of capital and summary","dataid":1}
,{"desc_":"Capital,Summary etc","datadesc":"Testing of capital and summary ","dataid":2}
,{"desc_":"First Reports","datadesc":"Completed Successfully","dataid":3}
,{"desc_":"First Reports","datadesc":"Still Pending","dataid":4}
,{"desc_":"First Reports","datadesc":"Failed twice ","dataid":5}
,{"desc_":"First Reports","datadesc":"Re attempting ...","dataid":6}
]}]}
-- 6 rows selected.